重写方法时,为什么我可以增加访问权限,但不能减少访问权限?

2022-08-31 12:42:28

为什么 Java 指定重写方法的访问说明符可以允许比重写方法更多但不能更少访问?例如,超类中的受保护实例方法可以在子类中设置为公共方法,但不能设置为私有方法。


答案 1

这是 OOP 中的一个基本原则:子类是父类的成熟实例,因此必须至少提供与父类相同的接口。使受保护/公共事物不那么明显将违反这一想法;您可以使子类作为父类的实例不可用。


答案 2

想象一下这两类:

public class Animal {
  public String getName() { return this.name; }
}

public class Lion extends Animal {
  private String getName() { return this.name; }
}

我可以写这个代码:

Animal lion = new Lion();
System.out.println( lion.getName() );

它必须是有效的,因为在Animal上,getName()方法是公开的,即使它在Lion上是私有的。因此,不可能使子类上的内容不那么明显,因为一旦你有了超类引用,你就可以访问这些东西。


推荐