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

转载 2015年11月17日 19:26:58

多态的定义:如果编译时和运行时类项不一样就会出现所谓的多态(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)方法。

相关文章推荐

python 对象的魔力--多态、封装和继承

简单介绍下这几个名词的意思。 多态(Polymorphism):意味着可以对不同类的对象使用相同的操作。 封装(Encapsulation): 即对外部世界隐藏对象的工作细节。 继承(Inher...

Python polymorphism

#!/usr/bin/python3 # classes.py by Bill Weinman [http://bw.org/] # This is an exercise file from P...

面向对象编程的几个关键概念继承、多态、组合

一、继承、接口与多态的相关问题:1、 继承的作用?好处?坏处?继承:通过继承实现代码复用。Java中所有的类都是通过直接或间接地继程java.lang.Object类得到的。继承而得到的类称为子类,被...

Java-面向对象编程-三大特性之多态

我们前面已经介绍了面向对象编程的三大特性之二,今天就介绍最后一个特性-多态。 什么叫多态?从字面上理解就是多种形态,即对同一个客体,可以有多种不同的形式。就好像糖一样,有多种口味,你想吃什么口味的就...

C语言面向对象编程(三):虚函数与多态

在《 C++ 编程思想》一书中对虚函数的实现机制有详细的描述,一般的编译器通过虚函数表,在编译时插入一段隐藏的代码,保存类型信息和虚函数地址,而在调用时,这段隐藏的代码可以找到和实际对象一致的虚函数实...

C++面向对象编程(七) 多态的详解

多态的概念: 多态性:是指具有不同功能的函数可以用同一函数名,即系统能够在运行时, 能够根据其类型确定调用哪个重载的成员函数。 面向对象中是这样表述多态性的:向不同的对象发送同一个消息,不同的对象在接...

面向对象编程三大特征 封装、继承和多态(二)

JAVA面向对象编程三大特征之一:多态 面向对象编程有三个特征,即封装、继承和多态。 方法的重写、重载与动态连接构成多态性。 要理解多态性,首先要知道什么是“向上转型”。(强制类...

面向对象编程的封装、继承、多态

面向对象的三个基本特征是:封装、继承、多态。一、封装封装是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。二...

1.面向对象编程思想(封装继承多态接口)

封装: 1.定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。 2.封装的目的是:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)