标签:
面向对象的三大特征:封装,继承和多态。多态是面向程序设计中代码重用的一个重要机制,它表示当同一操作作用在不同对象时,会有不同的语义。
Java 多态主要有以下两种表现方式:
1)方法重载(overload)。重载是指同一类中有多个同名方法,但是这些方法必须在参数列表上加以区分,要么参数个数不同,要么在相同位置上的参数类型不同。
2)方法的覆盖(override)。子类可以覆盖父类的方法。父类的引用不但可以指向其实例对象,也能够指向子类的实例对象。接口的引用变量也可以指向其实现类的实例对象。
而程序的调用方法是在运行期才动态绑定的,就是引用变量所指向的具体实例对象的方法,而不是引用变量的类型中定义的方法。这种动态绑定实现了多态。只有运行时才能够确定具体调用哪个方法。因此通过方法覆盖的实例也称为运行时多态。
注意成员变量是无法实现多态的,成员变量的取值取决于定义变量的类型。
public class Father { public int i=1; public void a() { System.out.println("father a"); } public void b() { System.out.println("father b"); } }
public class Son extends Father{ public int i=5; public void a() { System.out.println("Son a"); } public void b() { System.out.println("Son b"); } public void c() { System.out.println("Son c"); } }
public static void main(String[] args) { Father father=new Son(); father.a(); father.b(); //father.c(); error System.out.println(father.i); Son son=(Son)father; //父类强制转换成子类的原则:父类型的引用指向的是哪个子类的实例,就能转换成哪个子类的引用 son.c(); System.out.println(son.i);
//会抛出异常 java.lang.ClassCastException: Father cannot be cast to Son
//Son son=(Son)new Father();
}
输出:
Son a Son b 1 Son c 5
标签:
原文地址:http://www.cnblogs.com/maydow/p/4851263.html