c#数据类型转换的问题
classA//父类{方法1;方法2;}classB:A//子类{重写方法2;B的新方法3;}如果有如下语句:Aa=newB();请问:引用a指向的是:类A的对象还是类B...
class A//父类
{
方法1;
方法2;
}
class B :A//子类
{
重写方法2;
B的新方法3;
}
如果有如下语句:
A a=new B();
请问:引用a指向的是:类A的对象还是类B的对象????
我做了测试,结果a指向类B的对象,但是既然指向类B的对象,那么为什么引用a不能使用类B中的新方法3呢??
请赐教。本人没积分了,所以给不了分,请好心人帮忙
多谢你的帮助。如果是向上转型的话那么我的理解是:引用a应该是使用基类的方法,但为什么引用a使用的是子类中重写的方法。还有,这个向上转型以后,这个引用到底是指向基类的对象还是指向子类的对象????谢谢了 展开
{
方法1;
方法2;
}
class B :A//子类
{
重写方法2;
B的新方法3;
}
如果有如下语句:
A a=new B();
请问:引用a指向的是:类A的对象还是类B的对象????
我做了测试,结果a指向类B的对象,但是既然指向类B的对象,那么为什么引用a不能使用类B中的新方法3呢??
请赐教。本人没积分了,所以给不了分,请好心人帮忙
多谢你的帮助。如果是向上转型的话那么我的理解是:引用a应该是使用基类的方法,但为什么引用a使用的是子类中重写的方法。还有,这个向上转型以后,这个引用到底是指向基类的对象还是指向子类的对象????谢谢了 展开
4个回答
展开全部
这里存在着一个向上转型的问题
声明的是A 引用 也就是 a 的类型是A
而你new B() 只是使a是B的实例 但是犹豫声明的是A 向上转型 子类中的新成员无法赋予父类 所以 你在一个类型是父类的对象里 怎么可能看见子类的方法
A a=new B();//这句 执行了向上转型
你可以百度下向上转型
还不明白补充问题我继续回答
针对你的补充:
你声明的是父类类 使用的是子类的构造函数 这样 你可以初始化所有子类从父类继承的成员 但是子类的新成员父类是看不见的 注意 虽然是子类的实例 但是 因为声明的A 所以 a 是看不见子类的方法的 这就是因为声明的是父类 因为声明的时候就决定了你的对象在实例化的时候可以有什么不可以有什么 明白吗 就好像你准备了一个10升的空瓶子(声明 10升空瓶) 然后你倒入20升的水(实例化) 结果是 你只能得到一个装了10升水的瓶子 明白吗 水是那20升水里的(B()) 但是瓶子是10升的(A a)
你想得到子类的新方法 有个办法 就是向下转型 如下((B)a). 你打了点就会发现智能提示出现了子类的方法 为什么? 就是因为这样你才是个20升的瓶子(B)
我要累死了 你还不明白的话...我我我我我
我继续解释...
声明的是A 引用 也就是 a 的类型是A
而你new B() 只是使a是B的实例 但是犹豫声明的是A 向上转型 子类中的新成员无法赋予父类 所以 你在一个类型是父类的对象里 怎么可能看见子类的方法
A a=new B();//这句 执行了向上转型
你可以百度下向上转型
还不明白补充问题我继续回答
针对你的补充:
你声明的是父类类 使用的是子类的构造函数 这样 你可以初始化所有子类从父类继承的成员 但是子类的新成员父类是看不见的 注意 虽然是子类的实例 但是 因为声明的A 所以 a 是看不见子类的方法的 这就是因为声明的是父类 因为声明的时候就决定了你的对象在实例化的时候可以有什么不可以有什么 明白吗 就好像你准备了一个10升的空瓶子(声明 10升空瓶) 然后你倒入20升的水(实例化) 结果是 你只能得到一个装了10升水的瓶子 明白吗 水是那20升水里的(B()) 但是瓶子是10升的(A a)
你想得到子类的新方法 有个办法 就是向下转型 如下((B)a). 你打了点就会发现智能提示出现了子类的方法 为什么? 就是因为这样你才是个20升的瓶子(B)
我要累死了 你还不明白的话...我我我我我
我继续解释...
参考资料: 自己写的...
展开全部
说个很粗的东西,你father或开汽车, 你会开汽车和火车。
人家想让你去帮忙,结果你father去了,
你说说 你father会开火车不?
人家想让你去帮忙,结果你father去了,
你说说 你father会开火车不?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不可以使用方法3。。
C#讲继承的时候有。。
C#讲继承的时候有。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是啊,A类型的实例不能使用B类型的方法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询