抽象类的构造函数

  1. 抽象类是不能被实例化的,

    package com.learn;
    
    public abstract class AbstractPerson {
        
        public static void main(String[] args) {
            new AbstractPerson();
        }
    }
    
    //Error: java: com.learn.AbstractPerson是抽象的; 无法实例化执行
    
  2. 抽象类构造函数的修饰符为public

    //抽象类
    package com.learn;
    
    public abstract class AbstractPerson {
    
        public AbstractPerson(){
            System.out.println("AbstractPerson构造函数");
        }
    }
    
    //抽象类的继承类
    package com.learn;
    
    public class Person extends AbstractPerson{
    
        public Person(){
            System.out.println("Person构造函数");
        }
    
        public static void main(String[] args) {
            new Person();
        }
    }
    
    //运行结果
    AbstractPerson构造函数
    Person构造函数
    

    这说明抽象类可以有构造函数,只是不能被实例化。

  3. 抽象类构造函数的修饰符为protected

    //抽象类
    package com.learn;
    
    public abstract class AbstractPerson {
    
        //修改为protected
        protected AbstractPerson(){
            System.out.println("AbstractPerson构造函数");
        }
    }
    //运行结果
    AbstractPerson构造函数
    Person构造函数
    

    结果和使用public时相同,说明这两种修饰符并没有区别。

  4. 思考
    为什么jdk中都使用的是protected,而不使用public?
    1) protected表示只能继承的类可以使用,public表示所有类都可以使用。
    2) 抽象类的构造函数只能被继承类调用,这和protected的含义相同,因此用protected来修饰,但从编译和运行的角度并没有差别。

原文地址:https://www.cnblogs.com/mlr-wjy/p/12427803.html