在 Java 中限制较少的类中使用限制较少的方法有什么用?

Vin*_*sal 1 java overriding

例如

class Abc{
   public void fun() 
    {
      System.out.println("public method") ;
    }
    @Override
   public String toString() 
    {
      // "has to be public method but the access is default because of the class access";
      return super.toString();
    }
    
}

Run Code Online (Sandbox Code Playgroud)

在上面的例子中 - fun 方法访问是公共的,但类访问是默认的,因此使用公共方法而不是默认方法有什么用,因为它不能在不创建对象的情况下访问。

以同样的方式 toString 方法必须是公共的(覆盖不能限制访问)。但它已经受到限制,因为类访问是默认的

我的基本问题是在更受限制的类中使用限制较少的方法有什么用?

Joh*_*ger 6

我的基本问题是在更受限制的类中使用限制较少的方法有什么用?

有几个与继承和多态相关的目的。其中最大的可能是覆盖超类方法或实现接口方法的方法不能比它们覆盖的方法更受限制。在这方面,我注意到您在说以下内容时表达了可能的误解:

toString 方法必须是公共的(覆盖不能限制访问)。但它已经受到限制,因为类访问是默认的

该类Abc具有默认访问权限并不会阻止任何其他类引用该类Abc的公共方法或调用该类的公共方法。任何此类引用的声明类型将是 class 的超类型Abc,但调用的实现将是Abc.

此外,还有信号意图的问题。查看为类成员指定的访问权限以通过类的访问级别进行限定是有帮助的。因此,声明fun()public表示任何可以访问 的实例的Abc都可以访问它。这本身就有点有用,但如果类的访问级别发生变化,它也会特别有用。如果类的设计者根据这个原则选择成员访问级别,那么在这种情况下不需要重新访问这些级别。