gpt4 book ai didi

java - 为什么Java不限制子类的可见性大于父类

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:09 25 4
gpt4 key购买 nike

为什么在Java中可以创建一个可见性低于父类的子类。

package 1
public class Class1 {

public Class1 hello(){
Class1 c= new Class2();
return c;
}
}


class Class2 extends Class1 {

public Class1 hello() {
System.out.println("In overriden method");
return null;
}
}

假设Class1和Class2都在同一个包中,Class2的可见性是包私有(private)的。

package 2
public class Major {
public static void main(String[] args) {
Class1 ob = new Class1();
ob.hello().hello();
}
}

您会注意到,由于运行时多态性,将打印“In overriden method”。

在运行时,当 Class2 位于具有包私有(private)可见性的不同包中时,如何从 main() 访问 Class2hello() 方法?

Class2 不应被访问,因此 Class2 中的 hello() 方法也不应被访问。

最佳答案

protected 关键字(某种程度上类似于 package private)是一种保护代码不被外部使用的方法,这正是您的示例中发生的情况。您没有直接使用 Class2,而是使用 Class1,这授予您间接使用 protected Class2 的权利。

这是一个责任原则。 public Class1 负责授予外部包使用protected Class2 的权限。但这种责任也意味着 Class1 的开发人员必须知道为什么以及如何他授予您该权利。

扩展Class1这一事实在您的示例中没有任何实际意义,您的困惑可能来自于此。您无法从包外部实例化 Class2,但 Class1 可以。

关于java - 为什么Java不限制子类的可见性大于父类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34232738/

25 4 0
文章推荐: java - 如何在Java中创建一个只接受对角线鼠标移动的MouseMotionListener?
文章推荐: c++ - 如何重新调用初始化 3D vector 的构造函数
文章推荐: javascript - 如果

增长,则让

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com