java - 公共(public)与 protected 抽象类方法

标签 java access-specifier

<分区>

将包访问级别抽象类的非静态方法公开与保护时,是否存在任何安全/访问差异?无论如何,只有扩展抽象类的同一包中的类才能访问非静态方法吗?那么,这些非静态方法是公共(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());
  }
}

关于java - 公共(public)与 protected 抽象类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34260507/

相关文章:

java - XML 签名验证

ios - 使用swift 4访问扩展和另一个类中的fileprivate和private变量

java - OOP循环引用

java - 从包含最大和的整数数组中提取子数组的算法

java - 有没有办法使用jOOQ动态获取所有表字段名称?

c++ - 这是关于成员(member)访问规则的正确总结吗?

jquery - 如何分层特异性

ruby - protected 和私有(private)方法

ruby - "public/protected/private"方法是如何实现的,我该如何模拟它?

java - sdkmanager 在线程 "main"java.lang.NoClassDefFoundError : javax/xml/bind/annotation/XmlSchema 中抛出异常