请教高手 A a= new B();

请教高手 A a= new B();

2009-03-10 12:01 cjp625511526    分类:网站使用  |  浏览 5935 次
A a= new B();B继承A,请问a是A的实例还是B的实例啊?
         对象a可以调用A类中的方法吗?可以调用B的方法吗?
         怎么个调用法?最好能举个例子!
        
        谁能帮我解决啊,不胜感激!
为什么要把它的类型定义成A呢?这样做有什么好处?如果A、B类都有构造函数?先执行A的构造函数还是先执行B的构造函数?
2009-03-10 14:43 提问者采纳
1.B继承A,请问a是A的实例还是B的实例啊? 
答:B的实例 

2.对象a可以调用A类中的方法吗?可以调用B的方法吗? 
答:不一定,如果是虚拟方法,并且在B类重载了A的虚拟方法,a将会调用B的同名方法,普通方法会调用A的方法, 

举例: 
class A 
{ 
public void MethodA(){...} 
public virtual void MethodB(){...} 
} 

class A:B 
{ 
public new void MethodA(){...} 
public override void MethodB(){...} 
} 

其中,B类重写了A类的普通方法MethodA,也重写了A类的虚拟方法MethodB,则: 
A a = new B(); 
a.MethodA();// 将会调用A类的MethodA方法 
a.MethodB();// 将会调用B类的MethodB方法

// 补充:
为什么要把它的类型定义成A呢?这样做有什么好处?
答:A是基类,B是A的扩展,像B这样的扩展类可以很多很多的,如(B1,B2,B3......),扩展类是不可预见的,也需你在编写程序的时候还没有B2这个扩展类,你又怎么能调用B2 b = new B2()来创建B2的对象呢?你只有用A a;的方法定义一个引用,然后把B2传给a对象,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值