将包访问级别抽象类的非静态方法公开与保护时,是否存在任何安全/访问差异?无论如何,只有扩展抽象类的同一包中的类才能访问非静态方法吗?那么,这些非静态方法是公共(public)的还是 protected 是否重要,因为抽象类本身对谁可以扩展它有限制?
abstract class MyClass {
protected void myFunction(){
System.out.println("Only child classes can print this");
}
}
abstract class MyClass {
public void myFunction(){
System.out.println("Still, only child classes can print this");
}
}
public abstract method
将可以在其他包中访问,而 protected abstract method
无法访问。检查下面的示例。
具有公共(public)和 protected 抽象方法的抽象类
package package1;
public abstract class MyClass {
abstract protected String method1();
abstract public String method2();
}
扩展类并实现抽象类的另一个包。
package package2;
import package1.MyClass;
public class MyClassImpl extends MyClass {
@Override
protected String method1() {
return "protected method";
}
@Override
public String method2() {
return "public method";
}
}
访问抽象方法的主类。
package package2;
import package1.MyClass;
public class MainClass {
static MyClass myClass = new MyClassImpl();
public static void main(String[] args) {
System.out.println(myClass.method1()); // This is compilation error.
System.out.println(myClass.method2());
}
}