【Eternallyc】JAVA的多态

来源:互联网 发布:战略管理 知乎 编辑:程序博客网 时间:2024/06/14 17:57

先看代码,下面有我的分析。

package Test;import java.util.*;class baseclass{    public int book = 6;    public int a=8;    public void base(){        System.out.println("111");    }    public void test(){        System.out.println("This is test!");    }}public class Test2 extends baseclass{    public String book = "邓志纯";    public int a = 10;    public int b = 10;    public void base(){        System.out.println("2222");    }    public void sub(){        System.out.println("This is sub");    }    public void test(){        System.out.println("哇");    }    public static void main(String[] args){        /*baseclass bc = new baseclass();        System.out.println(bc.book);        bc.test();        bc.base();//不存在多态        Test2 sc = new Test2();        System.out.println(sc.book);        sc.test();        sc.base();*/        baseclass one = new Test2();  //下面存在多态        System.out.println(one.book);        System.out.println(one.a);        //System.out.println(one.b);无法无法编译        one.test();        one.base();        //one.sub();无法编译    }}

多态在《疯狂JAVA讲义》中的定义是相同类型的变量,调用同一方法呈现出不同的行为特征
理解许久,我用代码测试了下,因为变量one比较特殊,编译时类型是baseclass,运行时类型是Test2;就是说调用one中的变量和方法时必须是父类中有的(可以用这个代码测试one.b和one.sub),同时变量总是父类的(不存在被覆盖),方法则总是子类的(子类中有方法和父类重写,不是重写的话方法就还是父类的,不会被覆盖)