Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(Java接口)(接口名称)class\u name.newInstance()在Java中是什么意思?_Java - Fatal编程技术网

(Java接口)(接口名称)class\u name.newInstance()在Java中是什么意思?

(Java接口)(接口名称)class\u name.newInstance()在Java中是什么意思?,java,Java,代码: 我正在从书中学习接口,下面的代码是编写的。下面这行是什么意思 interface MyInterface { void connect(); } class SQLconnection implements MyInterface { public void connect() { System.out.println("Connection successful to SQL database"); } } class Ora

代码:

我正在从书中学习接口,下面的代码是编写的。下面这行是什么意思

interface MyInterface {
    void connect();
}
class SQLconnection implements MyInterface {
    public void connect() {
        System.out.println("Connection successful to SQL database");
    }
}
class OracleConnection implements MyInterface {
    public void connect() {
        System.out.println("Connection successful to Oracle database");
    }
}
public class Main {
    public static void main(String[] args) throws Exception {
        String class_name = args[0];
        Class c = Class.forName(class_name);
        MyInterface obj = (MyInterface)c.newInstance();
        obj.connect();
    }
}

Java中的工厂模式通常使用newInstance()方法来创建对象,关于使用工厂模式的原因有很多例子。例如:

MyInterface obj = (MyInterface)c.newInstance();
注意:
我想您可能会对代码为什么不使用“new”关键字来创建新对象感到困惑。

这是我的答案:
初始化类并生成实例时,newInstance()方法与关键字“new”之间的主要区别在于一个是方法,另一个是关键字

它们之间的区别在于创建对象的方式不同。前者使用类加载机制,后者只创建一个新类。那么为什么有两种方法来创建对象呢?这主要考虑软件设计思想,如软件可伸缩性、可伸缩性和可重用性。

c.newInstance()
将在
对象
类(所有类的父类)时返回一个实例

但是
connect()
方法是在
MyInterface
接口中定义的,而不是在
对象中定义的

因此,您可以键入caste from
Object
MyInterface
,然后在其上调用
connect()
方法


请注意,只有当
class\u name
=

它被称为
casting
时,才能进行这种类型的强制转换,但我们可以创建接口对象,对吗@如果您的代码执行了
SQLconnection conn=newsqlconnection()则不需要进行任何铸造。但是上面的代码在实例化一个
对象时使用了
反射
,该对象需要被
浇铸到类/接口中。@Bomba请看一看
obj.connect()将不起作用-对象没有名为
connect
的方法这就是为什么需要将其强制转换。将对象强制转换到接口中的需要/用途是什么?我的意思是(例如接口)对象
class c = Class.forName("Example");
factory = (ExampleInterface)c.newInstance();