Java 多态的理解 : A a2 =new B ()

        今天碰到了一道题让我对多态产生了一些疑问,花了点时间重新了解了一下所以在这里做个笔记:

 d

 首先来解释一个知识点:

A是父类,B是子类,a2是父类A的引用,b是子类B的引用。
相当于:
A a2=new B();//这就为向上转型
a2.function() 这时候a2可以调用A的所有未改写的方法和B改写了的方法。但是不可以用a2自己添加上去的方法

也就是说现在的a2可以调用黄色和绿色的部分(绿色的部分是指被B继承之后并改写了的方法) 蓝色的是指B在继承之后自己添加上去的方法。

输出:

第一步,因为创建a1对象,a1对象只是类A的一个普通实例对象,所以a1只能调用类A中的两个方法。a1.show(b),因为没有以类B作为参数的方法,但是B是A的子类,所以执行public String show (A obj),所以输出A and A ;

第二步,a1调用方法,同第一步,没有以类C作为参数的方法,但是C是A的子类,所以执行public String show (A obj),输入 A and A ;

第三步,a1调用方法,同第一步,此时参数类型为D,类A中存在以D类型为参数的方法,所以调用public String show (D obj),输出 A and D  ;

第四步,A a2 = new B(); 此语句为父类引用指向子类对象,此时a2只能调用A中的方法或者A的子类重写的A的方法。a2.show(b),类A中没有以类型B作为参数的方法(只看A中有的和B改写的。但是 public string show (B obj)是自己添加的所以不能采用),按照前三个来看是要执行public String show (A obj) 但此时的 A的这个方法被B改写所以是B and A (B是A的子类)

第五步,a2.show(c);即同第四步,a2只能调用A中的方法或者A的子类重写的A的方法。A中没有以C类型为参数的方法,C也为A的子类,所以执行public String show (A obj),此方法在A的子类B中被重写,所以执行B类的public String show (A obj),即输出 B and A ;

第六步,a2.show(d);类A中存在以类型D为参数的方法,所以此时可以调用A类的方法:直接执行public String show (D obj),输出 A and D ;

第七步,b.show(b);B b= new B() 声明类型B的对象b。b可以调用B类中的方法和B的父类A的方法,也需要注意B的子类对B中方法的重写。此时B类中共包含三个对A B D 三个参数的方法:

A类中的public String show (D obj) B类继承A改写的public String show (A obj) B类自己添加的

public String show (B obj),b.show(b)调用以类型B为参数的方法,所以执行public String show (B obj),输出为B and B ;

第八步,b.show(c);与第七步一样,此时参数为C类型,因为没有以类型C为参数的方法,但C直接继承了B,为B的子类,所以执行public String show (B obj)。

最后,b.show(d);以类型D作为参数,B类中共包含三个方法,分别是以类型D、类型A、类型B作为参数的方法,这个以类型D作为参数的方法是从B的父类A中继承过来的,所以直接执行public String show (D obj),输出为 A and D ;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值