Reg*_*n39 0 java access-specifier
在使用包访问级别抽象类的非静态方法公开vs使它们受到保护时是否存在任何安全/访问差异?只有扩展抽象类的同一个包中的类才能访问非静态方法吗?那么,这些非静态方法是公共的还是受保护的是否重要,因为抽象类本身会限制谁可以扩展它?
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");
}
}
Run Code Online (Sandbox Code Playgroud)
该public abstract method会是在为其他包访问protected abstract method不能被访问.请查看以下示例.
具有公共和受保护抽象方法的抽象类
package package1;
public abstract class MyClass {
abstract protected String method1();
abstract public String method2();
}
Run Code Online (Sandbox Code Playgroud)
另一个扩展类并实现抽象类的包.
package package2;
import package1.MyClass;
public class MyClassImpl extends MyClass {
@Override
protected String method1() {
return "protected method";
}
@Override
public String method2() {
return "public method";
}
}
Run Code Online (Sandbox Code Playgroud)
用于访问抽象方法的主类.
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());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10845 次 |
| 最近记录: |