可以隐藏私有方法吗? [复制]
Posted
技术标签:
【中文标题】可以隐藏私有方法吗? [复制]【英文标题】:Can private methods be hidden? [duplicate] 【发布时间】:2020-10-26 20:59:32 【问题描述】:我在网上阅读了几个关于是否可以覆盖私有方法的相互冲突的资料。 那么这个例子到底发生了什么?方法移动被隐藏了吗?
class Animal
private void move()
System.out.println("Animals can move");
class Dog extends Animal
public void move()
System.out.println("Dogs can walk and run");
public class TestDog
public static void main(String args[])
Dog b = new Dog(); // Dog reference and Dog object
b.move(); // runs the method in Dog class
https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html 说它在技术上不是压倒一切的,所以这叫什么,会不会有任何意外的行为?
【问题讨论】:
Animal reference but Dog object
但它似乎是Dog
参考
@NitinBisht 错字,已修复,谢谢
@Ivar 不,我问的是隐藏而不是覆盖
@Goldname 那么隐藏是什么意思?是不是很隐蔽?您是否设法以某种方式将“动物可以移动”带到您的控制台?
@Ivar 在这个意义上隐藏***.com/questions/10594052/…
【参考方案1】:
你必须这样写你的测试..
public class TestDog
public static void main(String args[])
Animal b = new Dog(); // Animal reference but Dog object
b.move(); // runs the method in Dog class
然后,你得到:
/TestDog.java:16: error: move() has private access in Animal
b.move(); // runs the method in Dog class
^
1 error
您的测试用例只是在Dog
中调用move()
,它不会被覆盖。
【讨论】:
【参考方案2】:你所做的并不是压倒一切的。如果您想确认这一点,只需在 Dog
类中将 @Override
放在 public void move()
之前,您将看到编译错误。
注意:private
方法始终隐藏在类中。没有办法让它在课堂之外访问。
【讨论】:
对,我问的是隐藏而不是覆盖 在 Animal 中将move()
的访问权限更改为 public
之前,这将无济于事
@AlexRudenko - 我没听懂你。
@ArvindKumarAvinash 我的评论与您的初始版本有关。
@AlexRudenko - 更新没有改变任何意义。我只是添加了and you will see compilation error.
以使其更清楚,但含义保持不变。以上是关于可以隐藏私有方法吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
有啥方法可以隐藏 html 静态网站上的 .html 扩展名? [复制]