这里简单记三点
多态中的成员函数
多态中的成员变量
多态中的静态成员函数
多态中的成员函数的特点:
在编译时期,参照引用类型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有,编译失败
在运行时期,参照对象所属的类中是否有调用的方法
简单来讲就是,成员函数在多态调用时,编译看左边,运行看右边。
下面贴代码
/**
* @(#)ploymorphic.java
*
*
* @author Praying
* @version 1.00 2016/1/13
*/
public class ploymorphic {
public static void main(String[] args)
{
Base b=new Derived();
b.method_1();
b.method_2();
b.method_3();//这里会编译失败
}
}
public class Base
{
public void method_1(){
System.out.println("Base Method_1");
}
public void method_2(){
System.out.println("Base Method_2");
}
}
public class Derived extends Base
{
/**
*override Base method_1
*/
public void method_1(){
System.out.println("Derived Method_1");
}
public void method_3(){
System.out.println("Derived Method_3");
}
}
下面是编译结果
不难看出,错误信息支出,无法找到method_3方法,是b是Base类的对象,而method_3是在Derived类中定义的。下面我们屏蔽掉b.method_3()这一行,看下运行结果
从图片中不难看出,b.method_1()是调用子类中的method_1()方法,那么b.method_2()呢,当然也是子类中的method_2(),只不过子类没有对其进行重写。下面来看多态中的成员变量。
多态中的成员变量
在多态中,无论编译还是运行,成员变量都参考左边(引用型变量所属的类)
下面看一段代码
/**
* @(#)polymorphic_02.java
*
*
* @author Praying
* @version 1.00 2016/1/13
*/
public class polymorphic_02 {
public static void main(String[] args)
{
Base b=new Derived();
System.out.println(b.num);
}
}
class Base{
public int num=4;
}
class Derived extends Base
{
public int num=8;
}
下面是运行结果
结果是4,也就是输出了Base类中的num.
多态中的静态函数
在多态中,静态成员函数,无论编译和运行都参考左边。
/**
* @(#)polymorphic_03.java
*
*
* @author Praying
* @version 1.00 2016/1/13
*/
public class polymorphic_03 {
public static void main(String[] args)
{
Base b=new Derived();
b.method();
}
}
class Base
{
public static void method()
{
System.out.println("Base::method");
}
}
class Derived extends Base{
public static void method()
{
System.out.println("Derived::method");
}
}
下面是运行结果
无需多言。