当前位置:  开发笔记 > 编程语言 > 正文

Java中的向上渲染是否隐藏了子类方法和字段?

如何解决《Java中的向上渲染是否隐藏了子类方法和字段?》经验,为你挑选了1个好方法。

在我正在编写的程序中,我有一个类RestrictedUser和类User派生RestrictedUser.自我试图通过强制转换来隐藏用户特定的方法RestrictedUser但是当我进行转换时,User方法仍然可用.当我运行调试器时,变量的类型也会出现User.

RestrictedUser restricted = regularUser;

在Java中进行强制转换是否隐藏了子类方法和字段,或者我做错了什么?有解决方法吗?

谢谢



1> John Calsbee..:

如果您尝试运行此代码:

User user = new User(...);
RestrictedUser restricted = user;
restricted.methodDefinedInTheUserClass(); // <--

你会得到一个编译错误.这在任何方面,形状或形式都不会是安全的,因为即使你要传递RestrictedUser另一种方法,该方法也可以做到这一点:

if (restricted instanceof User) {
    User realUser = (User)restricted;
    realUser.methodDefinedInTheUserClass(); // !!
}

而且你的"受限制"用户不再受限制了.

该对象作为对象显示在调试器中,User因为它是User对象,即使对象引用存储在RestrictedUser变量中也是如此.基本上,将子类的实例放在具有父类类型的变量中确实会"隐藏"子类的方法和字段,但不安全.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有