美文网首页
Java--抽象类及子类实例化顺序和方法调用顺序测试

Java--抽象类及子类实例化顺序和方法调用顺序测试

作者: 年少懵懂丶流年梦 | 来源:发表于2019-03-05 15:21 被阅读0次

    转至 https://blog.csdn.net/wo541075754/article/details/51523639,感谢作者

    抽象类:

    package com.secbro.test.abstractInit;
    
    /**
     * @author zhuzhisheng
     * @Description
     * @date on 2016/5/28.
     */
    public abstract class Fruit {
    
        protected Fruit(){
            System.out.println("实例化父类");
            toPlant();
            toEat();
        }
    
        protected abstract void toEat();
    
        protected abstract void toPlant();
    
    }
    
    

    子类Banana:

    package com.secbro.test.abstractInit;
    
    /**
     * @author zhuzhisheng
     * @Description
     * @date on 2016/5/28.
     */
    public class Banana extends Fruit{
    
        protected Banana(){
            System.out.println("实例化子类 Banana");
    
        }
    
        @Override
        protected void toEat() {
            System.out.println("Eat a Banana");
        }
    
        @Override
        protected void toPlant() {
            System.out.println("Plant a Banana");
        }
    
    }
    
    

    子类Orange:

    package com.secbro.test.abstractInit;
    
    /**
     * @author zhuzhisheng
     * @Description
     * @date on 2016/5/28.
     */
    public class Orange  extends Fruit{
    
        public Orange() {
            System.out.println("实例化子类 Orange");
        }
    
        @Override
        protected void toEat() {
            System.out.println("Eat a Orange");
        }
    
        @Override
        protected void toPlant() {
            System.out.println("Plant a Orange");
        }
    
    }
    
    

    测试类:

    package com.secbro.test.abstractInit;
    
    /**
     * @author zhuzhisheng
     * @Description
     * @date on 2016/5/28.
     */
    public class TestFruit {
        public static void main(String[] args) {
            new Banana();
            new Orange();
        }
    }
    
    

    执行结果打印:

    实例化父类
    Plant a Banana
    Eat a Banana
    实例化子类 Banana
    实例化父类
    Plant a Orange
    Eat a Orange
    实例化子类 Orange
    

    结果分析

    1. 查看子类、抽象类的构造方法打印结果可知,实例化子类时先实例化父类。
    2. 在抽象类的构造方法中调用了自己未实现的抽象方法,那么对应实例化的子类实现了此方法,在抽象类实例化之后,子类未实例化之前,抽象类可以调用子类实现的抽象方法。
    3. 不同的类实例化打印不同的抽象方法实现,java多态的一种表现形式。

    相关文章

      网友评论

          本文标题:Java--抽象类及子类实例化顺序和方法调用顺序测试

          本文链接:https://www.haomeiwen.com/subject/dioedftx.html