构造方法可以处于public、protected、private和默认四种访问级别之一。
public
public这里就不多说了
private
当构造方法为private级别时,意味着只能在当前类访问它,不能被继承,不能被其他程序用new创建实例对象。可以对比其他几种修饰符的作用:abstract修饰的类,不允许被实例化,这点和private修饰构造方法相同,但abstract修饰的类可以被继承,拥有子类,可以创建子类的实例;final类禁止被继承,这点和private修饰构造方法相同,但是final类可以用new创建实例对象。
protected
如果构造函数是protected,那么该类可以继承,可以在被包内其他类中产生实例,但是无法在包外或者子类以外的地方产生实例.
看一下下面的程序
package com.ustc.sub;
public class Base {
protected Base() {
System.out.println("haha");
}
}
package com.ustc.sub;
public class ProtectedDemo extends Base {
public ProtectedDemo() {
super();// 调用父类Base的构造函数,可以调用因为类的访问修饰符为protected
}
public static void main(String args[]) {
ProtectedDemo obj = new ProtectedDemo();
Base objBase = new Base();
}
}
package com.ustc.sup;
import com.ustc.sub.Base;
public class ProtectedDemo1 {
public static void main(String args[]){
Base objBase = new Base();//不能调用因为访问修饰符为protected
}
}
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为friendly
子孙类可以在同一包,也可以不一个包,此时以最大权限为准
---------------------
版权声明:本文为CSDN博主「BAOLIANG196」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangyanguiyiyang/article/details/49884207