在我正在编写的程序中,我有一个类RestrictedUser
和类User
派生RestrictedUser.
自我试图通过强制转换来隐藏用户特定的方法RestrictedUser
但是当我进行转换时,User方法仍然可用.当我运行调试器时,变量的类型也会出现User
.
RestrictedUser restricted = regularUser;
在Java中进行强制转换是否隐藏了子类方法和字段,或者我做错了什么?有解决方法吗?
谢谢
如果您尝试运行此代码:
User user = new User(...); RestrictedUser restricted = user; restricted.methodDefinedInTheUserClass(); // <--
你会得到一个编译错误.这在任何方面,形状或形式都不会是安全的,因为即使你要传递RestrictedUser
另一种方法,该方法也可以做到这一点:
if (restricted instanceof User) { User realUser = (User)restricted; realUser.methodDefinedInTheUserClass(); // !! }
而且你的"受限制"用户不再受限制了.
该对象作为对象显示在调试器中,User
因为它是User
对象,即使对象引用存储在RestrictedUser
变量中也是如此.基本上,将子类的实例放在具有父类类型的变量中确实会"隐藏"子类的方法和字段,但不安全.