java 为什么我们不能在方法覆盖时降低可见性(特别是public到default)

mjqavswn  于 11个月前  发布在  Java
关注(0)|答案(3)|浏览(98)

这是一个非常基本的概念,我们不能在重写时降低方法的可见性。但我想知道为什么?
这里我们已经将返回类型改为默认值,这样可以访问同一个包。那么为什么不允许将返回类型改为默认值呢?
我明白,如果它是私有的或受保护的,那么在这种情况下,它不能被访问,但为什么不默认?
是的,已经有很多可用的线程,但我不能清楚地理解这个概念。

vuktfyat

vuktfyat1#

这是关于SOLID规则之一,Liskov substitution principle。这是现代应用程序如何使用多态性和OOP范式。
从运行时和编译时来看,它是否是包私有访问修饰符。
这是不可能的,因为如果你有一个类com.yadvendra.vehicles.Car,它有一个公共方法int speed(),那么其他对象应该总是可以扩展它(添加新的逻辑,如装饰模式等)。假设你要将你的Car对象返回给其他包中的其他类,如com.yadvendra.view.CarView。这个类想要使用你的公共方法int speed(),但是它不能,因为你把它的可见性级别降低到了package-private。

moiiocjp

moiiocjp2#

我明白,如果它是私有的或受保护的,那么在这种情况下,它不能被访问,但为什么不默认?
默认的访问方式也是一样的。这是一个相对的比较:不允许将作用域缩小到任何限制性更强的作用域,因为它破坏了超类的约定,正如注解中所解释的那样。

旁注:你似乎明白protecteddefault/package-private范围更不允许。这是不正确的。protectedpackage-private和更多。

hc8w905p

hc8w905p3#

API的用户只需要知道父类,你怎么解释他们现在可以不使用某个方法,只是因为父类的实现降低了子类的可见性?

相关问题