关闭

面向对象编程中的多态(polymorphism)

310人阅读 评论(1) 收藏 举报
分类:

多态的定义:如果编译时和运行时类项不一样就会出现所谓的多态(polymorphism),多态可以向上转型。

  • 编译时类项:声明该变量时使用的类型决定
  • 运行时类项:实际赋给该变量的对象决定

实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

多态存在的三个必要条件:

一、要有继承;
二、要有重写;
三、父类引用指向子类对象。

父类引用生成子类对象,那这个引用只能调用在父类中已经定义过的属性和方法,而对子类自己新定义的属性和方法则不能访问。

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

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

class C extends B
{
}   
class D extends B
{
} 

public class MultiTest{ 
public static void main(String[] args){ 
        A ab = new B();  
        B b = new B();  
        C c = new C(); 
        System.out.println(ab.show(b));   
        System.out.println(ab.show(c)); 
        System.out.println(b.show(c));
        //结果为:B A ,B A ,B B
} 
} 

A ab=new B();:ab是一个父类引用,之后执行ab.show(b),这时ab先从父类中查找方法,与之匹配的只有show(A obj)方法,而且发现子类重写了该方法,这时动态链接到子类的show(A obj)方法。

b.show(c);:这里,b中有show(A obj)方法和show(B obj)方法,继承层次为C->B->A,根据重载的最近匹配原则,会调用show(B obj)方法。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:173920次
    • 积分:4221
    • 等级:
    • 排名:第6465名
    • 原创:186篇
    • 转载:132篇
    • 译文:61篇
    • 评论:11条