[英]Creating reference of Interface and assigning it the implementing object considered a clean design decision
[英]creating interface object and assigning that object static method?
connection con = DriverManager getconnection(URL,user,pwd);
这怎么可能 ? 这里连接是接口,
我们如何创建接口对象?
然后在我们分配连接的对象 DriverManager 类的静态方法 getconnection 之后。 这一切如何运作? 有点迷惑
如果上面的代码是可能的,那么下面应该可以工作,但它显示我错误
interface h
{
public int r=7;
public void set(int u);
}
class A implements h
{
public static int t=6;
int y=6;
public static void get()
{
System.out.println(t*8);
}
public void set(int u)
{
System.out.println(y*u);
}
}
class S_tatic
{
public static void main(String arg[])
{
h l= new h(); // it shows me error
h l = A.get(); //if this can be done then what's
//meaning of static ?
}
}
现在为什么我不能在这里创建接口的对象?
并说一旦我们创建了接口对象,那么我们如何将对象分配给任何方法
我认为我们应该按照以下方式进行,
l.set(); // 在非静态方法的情况下
A.get(); // 如果是静态方法
如果这是真的,那么我在这里包含的第一个 jdbc 语法是如何工作的?
关于接口只有一个主要规则:你不能用new InterfaceName()
初始化它们。
现在,这段代码是否违反了该规则? (为了好看我改了)
Connection con = DriverManager.getconnection(URL,user,pwd);
你甚至能在那里找到new
这个词吗? 不! 这意味着它没有违反规则,所以它编译。
让我们看看你的代码:
public static void main(String arg[])
{
h l= new h();
h l = A.get();
}
看看main
的第一行, new h()
! 你违反了规则! 因此,它不编译。 (第二行也无法编译,因为get
返回void
btw)
实际上,在DriverManager.getConnection
方法中,它可能包含一些这样的代码:
Connection con = new XXXConnection();
其中XXXConnection
是一个实现Connection
的类。
接口,顾名思义,无论是在语言语境还是现实世界中,都是实现抽象的一种方式。
我建议您只浏览一次 Java 参考中的接口概念: https : //docs.oracle.com/javase/tutorial/java/concepts/interface.html
来自参考:在最常见的形式中,接口是一组具有空体的相关方法。 如果指定为接口,自行车的行为可能如下所示:
interface Bicycle {
// wheel revolutions per minute
void changeCadence(int newValue);
void changeGear(int newValue);
void speedUp(int increment);
void applyBrakes(int decrement);
}
简而言之,如果您说我们通过接口指定自行车做什么。 但是,例如 RangerBicycle 或 MountainBicycle 的实现类将为接口中定义的行为定义实时实体或对象。
因此,当您尝试“实例化一个接口”时,编译器会向您显示错误消息,指出它无法实例化给定类型,因为它是一个接口。
是的,您可以创建可以指向实现类的对象的接口引用变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.