我可以通过类的构造函数实例化接口的对象吗

-1 java constructor interface instantiation

我有一个这样的程序代码。

我的界面是

public interface MyInterface {
        public void m1(String name);
        public void m2(int num);
}
Run Code Online (Sandbox Code Playgroud)

我有一个实现上述接口的类。

    public class World implements MyInterface {
        public void m1(String name) {
               System.out.println(name);
        }

        public void m2(int num){
              System.out.println("Number is: "+num);
        }

        public static void main(String args[]) {
                MyInterface ob1  = new World(); //How it is instantiated
                MyInterface ob2  = new World();   //How this one too is instantiated
                ob1.m1("Jaguar"); 
                ob2.m2(5);

        }
}
Run Code Online (Sandbox Code Playgroud)

Mus*_*bir 5

在java中,当我们写一些东西时

Class1 a= new Class2();
Run Code Online (Sandbox Code Playgroud)

究竟发生了什么是我们正在调用 class2 的构造函数,这意味着我们正在 class2 的堆上创建一个对象并将其分配给 class1 类型的引用变量(即 a)。将左侧部分视为遥控器,将右侧部分视为电视。左边部分只控制可以在右边部分创建的对象上调用的函数(因为实现类中的函数可能比接口中声明的函数多)。

如果我们写这样的东西:-

Class1 a= new Class1();
Run Code Online (Sandbox Code Playgroud)

引用变量和对象变量都是 Class1 类型,因此可以调用 Class1 的所有方法。

如果我们写这样的东西:-

Class1 a= new Class2();
Run Code Online (Sandbox Code Playgroud)

Class2 的所有方法都将被调用,但仅限于在 Class1 中声明的方法。

因此,您的界面永远不会被实例化,也无法实例化,它只是对创建的对象(ob1 和 ob2)提供了一种限制,无论在 World 中额外添加了多少函数,都只能在对象上调用 m1 和 m2 两个方法班级。