java中的多态

来源:互联网 发布:小米5x手机壳淘宝卡通 编辑:程序博客网 时间:2024/05/22 00:47

下面一个例子,可以很清楚的给大家讲解什么是多态

父类:

 

public class BaseClass {
    public int book = 6;
    public void base(){
        System.out.println("父类的普通方法");
    }
    
    public void test() {
        System.out.println("父类的被覆盖的方法");
    }
}

 

子类:

public class SubClass extends BaseClass {

    public String book = "子类中的book隐藏父类中的book";
   
    public void test() {
        System.out.println("子类的覆盖父类的方法");
    }
   
    public void sub() {
        System.out.println("子类的普通方法");
    }

调用:

public static void main(String[] args) {
        BaseClass bc = new BaseClass();//父类对象
        System.out.println(bc.book);
        bc.base();
        bc.test();
       
        SubClass sc = new SubClass();//子类对象
        System.out.println(sc.book);
//        System.out.println(super.book);//static方法中使用super会报错
        sc.base();
        sc.test();
       
        BaseClass dt = new SubClass();//编译时父类,运行时子类
        System.out.println(dt.book);
        dt.base();
        dt.test();
        //dt.sub();
    }

运行结果:

6
父类的普通方法
父类的被覆盖的方法
子类中的book隐藏父类中的book
父类的普通方法
子类的覆盖父类的方法
6
父类的普通方法
子类的覆盖父类的方法

从上面的调用我们看到,bc是父类对象,book、base方法、test方法都是父类中定义的。sc是子类对象,book、test方法、sub方法都是子类的。dt不同,编译类型是父类,运行时类型是子类,运行时调用的是子类的方法,因此test是子类的方法,但是父类中没有定义的方法,在编译时dt.sub会出错。这种,dt、bc都是BaseClass类型,但是运行时输出的却不一样,这种现象就叫多态。