为什么类引用类型和接口(interface)引用类型的方法的访问范围不同。
在下面的例子中
interface ImInterface{
void do1();
void do2();
}
class MyClass implements ImInterface {
void do1(){
System.out.println("do1");
}
void do2(){
System.out.println("do2");
}
void do3(){
System.out.println("do3");
}
}
你能帮我理解为什么mc
变量定义如下
MyClass mc = new MyClass();
在没有任何转换的情况下无法访问do1和d2
?它实现了合约 (ImInterface
) 中的所有功能。为什么Java中会这样呢?
另外,为什么mi
定义如下
MyInterface mi = new MyClass();
没有任何转换就无法访问do3
?
我知道 mi
和 mc
都有不同的类型,但实现后两者都变成了一个,那么为什么不进行强制转换访问会有所不同呢? mc
和 mi
都指向相同类型的实例。
最佳答案
由于您将对象 mi
声明为 MyInterface
类型,因此您只能访问在 MyInterface
上声明的方法。
当您将对象 mc
声明为 MyClass
类型时,您将可以访问 MyClass
及其父类(super class)中声明的所有方法。
当 Java 查看引用 mi
时,它只会知道它是 MyInterface
类型。
现在,如果您在包外部声明 mc
,那么您将无法访问它们的任何方法,因为它们具有包可见性。
关于java - Java 中类和接口(interface)方法的方法可访问性差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61204221/