Public 与受保护的抽象 class 方法
Public vs. Protected abstract class method
将包访问级别抽象化 class 的非静态方法 public 与将它们保护起来有什么 security/access 区别吗?只有扩展抽象 class 的同一个包中的 classes 无论如何都可以访问非静态方法,对吗?那么,这些非静态方法是 public 还是受保护是否重要,因为抽象 class 本身对谁可以扩展它施加了限制?
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
无法访问。检查下面的示例。
抽象 class 同时具有 public 和受保护的抽象方法
package package1;
public abstract class MyClass {
abstract protected String method1();
abstract public String method2();
}
扩展 class 并实现抽象 class 的另一个包。
package package2;
import package1.MyClass;
public class MyClassImpl extends MyClass {
@Override
protected String method1() {
return "protected method";
}
@Override
public String method2() {
return "public method";
}
}
Main class 用于访问抽象方法。
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());
}
}
将包访问级别抽象化 class 的非静态方法 public 与将它们保护起来有什么 security/access 区别吗?只有扩展抽象 class 的同一个包中的 classes 无论如何都可以访问非静态方法,对吗?那么,这些非静态方法是 public 还是受保护是否重要,因为抽象 class 本身对谁可以扩展它施加了限制?
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
无法访问。检查下面的示例。
抽象 class 同时具有 public 和受保护的抽象方法
package package1;
public abstract class MyClass {
abstract protected String method1();
abstract public String method2();
}
扩展 class 并实现抽象 class 的另一个包。
package package2;
import package1.MyClass;
public class MyClassImpl extends MyClass {
@Override
protected String method1() {
return "protected method";
}
@Override
public String method2() {
return "public method";
}
}
Main class 用于访问抽象方法。
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());
}
}