Max*_*ood 2 java intellij-idea
假设我们有以下代码:
public interface Dvd {
void startDvd();
}
Run Code Online (Sandbox Code Playgroud)
和另一个接口:
public interface Tv {
void startTv();
}
Run Code Online (Sandbox Code Playgroud)
和一个类:
public class Logitech implements Dvd, Tv {
@Override
public void startDvd() {
}
@Override
public void startTv() {
}
}
Run Code Online (Sandbox Code Playgroud)
然后当你创建一个实例时:
public class Demo {
public static void main(String[] args) {
Tv tv = new Logitech();
tv. //here when we click the . we expect to see only the startTv()
//method, as the type of our reference is Tv
}
}
Run Code Online (Sandbox Code Playgroud)
然而显示的是:
这不是使抽象 OOP 概念无效吗,因为它总是向我显示我的类实现的接口中的所有方法,有时这可能是大量的方法,不会为我隐藏任何复杂性?
为什么我看到这两种方法而不仅仅是 startTv()?
这仅适用于局部变量,并且仅当 IntelliJ 能够确保变量的类型实际上始终是某种具体类型时(在本例中Logitech)。
如果我们添加另一个类来实现Tv
class Foo implements Tv {
@Override
public void startTv() { }
}
Run Code Online (Sandbox Code Playgroud)
然后有条件地分配给变量:
class Demo
{
private static int bar()
{
return 3;
}
public static void main(Tv args) {
Tv tv = new Logitech();
if (bar() > 2)
{
tv = new Foo();
}
tv. //only has startTv method
}
}
Run Code Online (Sandbox Code Playgroud)
那么 IntelliJ 不再能够推断类型,因此它不会提示我们来自Logitech(或来自Foo其中任何一个)的方法。
对于方法参数也是如此 - IntelliJ 不知道真正的具体类型,因此它不会为您提供任何其他方法。
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |