公共与受保护的抽象类方法

时间:2015-12-14 05:43:31

标签: 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");
    }
}

1 个答案:

答案 0 :(得分:6)

public abstract method可以在其他包中访问,因为无法访问protected abstract method。请查看以下示例。

包含公共和受保护抽象方法的抽象类

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());
  }
}