java - Java 中类和接口(interface)方法的方法可访问性差异

标签 java interface

为什么类引用类型和接口(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

我知道 mimc 都有不同的类型,但实现后两者都变成了一个,那么为什么不进行强制转换访问会有所不同呢? mcmi 都指向相同类型的实例。

最佳答案

由于您将对象 mi 声明为 MyInterface 类型,因此您只能访问在 MyInterface 上声明的方法。

当您将对象 mc 声明为 MyClass 类型时,您将可以访问 MyClass 及其父类(super class)中声明的所有方法。

当 Java 查看引用 mi 时,它只会知道它是 MyInterface 类型。

现在,如果您在包外部声明 mc ,那么您将无法访问它们的任何方法,因为它们具有包可见性。

关于java - Java 中类和接口(interface)方法的方法可访问性差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61204221/

相关文章:

java - 如何使用crawler4j提取页面上的所有链接?

javascript - 为什么类中的属性不是只读的(Typescript)

go - 如何使用接口(interface)填充 slice ?

java - 局部变量同步,比同步方法更好?

php - 在 Kohana 3.1.3 中使用接口(interface)

c# - IIS 64 位 Com dll

java - 类可以从其他类继承接口(interface)强加的方法结构的实现吗?

java - 卡夫卡消费者: can onPartitionsRevoked and onPartitionsAssigned callbacks be executed inside one poll() call?

java - 使用自定义 Swing 组件进行文本换行的 JOptionPane

java - 在过滤器中添加标题作为响应?