抽象类的构造函数
-
抽象类是不能被实例化的,
package com.learn; public abstract class AbstractPerson { public static void main(String[] args) { new AbstractPerson(); } } //Error: java: com.learn.AbstractPerson是抽象的; 无法实例化执行
-
抽象类构造函数的修饰符为
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构造函数
这说明抽象类可以有构造函数,只是不能被实例化。
-
抽象类构造函数的修饰符为
protected
时//抽象类 package com.learn; public abstract class AbstractPerson { //修改为protected protected AbstractPerson(){ System.out.println("AbstractPerson构造函数"); } } //运行结果 AbstractPerson构造函数 Person构造函数
结果和使用public时相同,说明这两种修饰符并没有区别。
-
思考
为什么jdk中都使用的是protected,而不使用public?
1) protected表示只能继承的类可以使用,public表示所有类都可以使用。
2) 抽象类的构造函数只能被继承类调用,这和protected的含义相同,因此用protected来修饰,但从编译和运行的角度并没有差别。