多态的两个小例子

class A {
    public String show(B obj){
        return ("A and D");
    }
    public String show(A obj) {
        return ("A and A");
    }
}
class B extends A {
    public String show(B obj) {
        return ("B and B");
    }
    public String show(A obj) {
        return ("B and A");
    }
}
public class Test2 {
    public static void main(String[] args) {
        A a2 = new B();  
        System.out.println(a2.show(a2));//输出B and A
        System.out.println(a2.getClass().getTypeName());//输出cn.bh.tt.B
        /*总结:1.当A new出子类a2,a2的类型是B,所以调用show()方法时,会先在子类B里面找,
         * 如果找不到再去父类A里面找。
         * 2.最有意思的是a2调用了show(A obj)而不是show(B obj),应该是因为a2是由A new出来的所以在充当
         * 参数的时候会向上转型为A。
         * */
    }
}
class A{
    public int i=7;//父类属性 i
    public A(){    //父类无参构造器
        print();
    }              //父类方法print()
    public void print(){ 
        System.out.print(i);
        System.out.println("父类方法");
    }
}
public class Polymorphic2 extends A{
    public int j=4;       //子类属性 j
    public Polymorphic2(){ //子类无参构造器
        print();
    }
    public void print(){  //子类方法print
        System.out.println(j);
        System.out.println("子类方法");
    }
    public static void main(String[] args){
        new Polymorphic2();
        /*输出为0<br>4:子类先默认隐式调用父类构造器,由于print被子类重写,所以调用子类方法,但此时j是还没有初始化的,所以输出为0
        */
    }
}

转载于:https://www.cnblogs.com/bihanghang/p/9956897.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值