剖析java中的多态(继承)问题

继承和多态是面向对象语言中一个比较重要的概念,本文以代码为例,简单描述java中有关多态,覆盖的基本特征。 

示例代码:

/**
 * 
@author test.java
 * 
 
*/


class  A  {
    
public String f(D obj) {
        
return ("A and D");
    }


    
public String f(A obj) {
        
return ("A and A");
    }

}


class  B  extends  A  {
    
public String f(B obj) {
        
return ("B and B");
    }


    
public String f(A obj) {
        
return ("B and A");
    }

}


class  C  extends  B  {
}


class  D  extends  B  {
}


public   class  test  {

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        A a1 = new A();
        A a2 
= new B();
        B b 
= new B();
        C c 
= new C();
        D d 
= new D();
        System.out.println(a1.f(b)); 
// A and A
        System.out.println(a1.f(c)); // A and A
        System.out.println(a1.f(d)); // A and D
        System.out.println(a2.f(b)); // B and A
        System.out.println(a2.f(c)); // B and A
        System.out.println(a2.f(d)); // A and D
        System.out.println(b.f(b)); // B and B
        System.out.println(b.f(c)); // B and B
        System.out.println(b.f(d)); // A and D

    }


}

解析:

  1. 代码中的继承关系为(C|D) -> B -> A
  2. a1.f(b), a1.f(c)和a1.f(d)比较容易理解
  3. 对象a2是类B的一个实例,而在类B中,方法f(B obj)被f(A obj)所覆盖,所以a2.f(b),a2.f(c)的输出如代码中的注释所示
  4. 正常的多态函数调用次序如下:
    • this.f(o)
    • super.f(o)
    • this.f((super)o)
    • super.f((super)o);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值