![]() |
1
3
让我试着用更多的外行术语来解释:
对象
因此,在编译时,只允许调用
如果你知道
因此,通过强制转换,您可以访问
如果您不确定
|
![]() |
2
3
这是错误的。
你可能会想,虽然
界面
你必须通过
然后:
注意,虽然我们的对象接口是
|
![]() |
3
2
让我们把C++作为一个起点,因为它是您所使用的语言:
这样行吗? 您只能调用基类中已知的方法(Java)/函数(C++)。您可以通过使其虚拟化来覆盖它们(C++;Java:所有非静态方法都是隐式虚拟的!):
回到第一个例子:你需要 向下 cast调用新函数:
在Java中完全一样,只是没有显式指针,而是隐式引用。。。
|
![]() |
4
2
您只能在Java中调用已声明接口的方法。在您的情况下,只有
继承中的方法调用总是在Java运行时进行评估。因此,在您的示例中,这意味着您必须以以下方式声明类:
这是你的子类
你必须打电话
在运行时,将变量的接口声明为
使命感
输出将相同:
如果省略
|
![]() |
5
0
大多数情况下,当您执行多态性时,您使用的是抽象类或接口作为基础。 正如我们所知,我们正在做的 向上投射 在运行时多态性,这是通过方法重写实现的。因此,只能访问基类中的重写方法。 如果要完全访问派生类,需要通过强制转换来显式地告诉编译器。 |
|
user29759326 · 如何返回递归函数中的最后一个值? 3 月前 |
|
malife89 · 将java中的字符串读取为正确的日期格式 3 月前 |
![]() |
Tim · 在java中,有没有更快的方法将字节数组写入文件? 3 月前 |
![]() |
rudraraj · java中未声明最终变量 4 月前 |
![]() |
Bala Ji · 以下BFS的实施效率如何? 4 月前 |