创建接口对象并为该对象分配静态方法?

时间:2017-01-27 06:50:37

标签: java object interface

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语法是如何工作的?

2 个答案:

答案 0 :(得分:0)

关于界面只有一条主要规则:您无法使用 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的类。

答案 1 :(得分:0)

接口,因为单词表示语言或现实世界的上下文是否是实现抽象的一种方式。

我建议您只使用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将为接口中定义的行为定义实时实体或对象。

因此,当您尝试“实例化一个接口”时,编译器会显示错误消息,表明它无法实例化给定类型,因为它是一个接口。

是的,您可以创建可以指向实现类对象的接口引用变量。