java中的成员变量可以是接口型的吗

2025-01-01 00:11:37
推荐回答(4个)
回答1:

可以。往往采用接口型来实现多态。

1、定义一个接口TestFace

public interface TestFace{//定一个接口
   void make();//定义一个接口方法
}

2、定义一个类MyClass,里面包含一个接口型变量

public class MyClass{//定义一个类
    TestFace tf;//定义一个接口型变量tf
    public MyClass(TestFace tf){//构造函数初始化接口型变量tf
       this.tf = tf;
    }
    public work(){  //函数调用
       this.tf.make();//实际的接口型类实例。
    }
}

3、定义2个类,实现接口TestFace 

public class C1 implements TestFace{//定一个类C1实现接口TestFace
    public void make(){//实现接口的方法make
       System.out.println("c1");//打印c1
    }
}
public class C2 implements TestFace{//定一个类C2实现接口TestFace
    public void make(){//实现接口的方法make
       System.out.println("c2");//打印c2
    }
}

4、使用接口变量

TestFace tf1 = new C1();//实现一个类实例C1
TestFace tf2 = new C2();//实现一个类实例C2
MyClass mc = MyClass(tf1);//定义一个MyClass的类实例,使用tf1
MyClass mc2 = MyClass(tf2);//定义一个MyClass的类实例,使用tf1
同一个类的work,能够实现不同的打印内容
mc.work();
mc2.work();

回答2:

这样确实没错,不过推荐不要这么用,接口一般都是用来被继承来实现其规定的“标准”,这样才符合面向对象的思想。(思想很重要的,你以后会知道,早点培养比较好)

回答3:

接口貌似是可以作为对象类型的,编译不会报错。但bb 需要实例化才能使用,否则调用时会报NullPointException。

回答4:

可以。但实例化时要用它的实现类。
例如:IUserDao iUserDao = new IUserDaoImpl();
(IUserDao是接口,IUserDaoImpl是它的实现类)