您的位置:首页 > 编程语言

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

2015-11-17 19:26 253 查看
多态的定义
:如果编译时和运行时类项不一样就会出现所谓的多态(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)方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: