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

Java学习笔记之多态

2016-01-13 15:46 519 查看

这里简单记三点

多态中的成员函数

多态中的成员变量

多态中的静态成员函数

多态中的成员函数的特点:

在编译时期,参照引用类型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有,编译失败

在运行时期,参照对象所属的类中是否有调用的方法

简单来讲就是,成员函数在多态调用时,编译看左边,运行看右边。

下面贴代码

[code]/**
 * @(#)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(),只不过子类没有对其进行重写。下面来看多态中的成员变量。

多态中的成员变量

在多态中,无论编译还是运行,成员变量都参考左边(引用型变量所属的类)

下面看一段代码

[code]/**
 * @(#)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.

多态中的静态函数

在多态中,静态成员函数,无论编译和运行都参考左边。

[code]/**
 * @(#)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");
    }
}


下面是运行结果



无需多言。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: