我正在学习java中的界面,而我在我的子类主要方法中访问它我可以通过三种方式访问这些学习者的区别是什么可以帮助这个
public interface interfa
{
void educationloan();
abstract void homeloan();
static int i = 10;;
}
public class testinter implements interfa {
public static void main(String args[])
{
System.out.println("Sub class access a interface by implement");
testinter t = new testinter();
t.miniloan();
t.educationloan();
t.homeloan();
System.out.println("Super class access a only interface in sub class");
interfa a = new testinter();
a.educationloan();
//a.miniloan();
a.homeloan();
System.out.println("Annomys class access a only interface in sub class");
interfa xx = new interfa() {
@Override
public void homeloan() {
}
@Override
public void educationloan() {
// TODO Auto-generated method stub
}
};
xx.educationloan();
xx.homeloan();
}
}
这里我的问题是哪个人可以在哪种情况下使用?有什么区别???
答案 0 :(得分:1)
首先,由于您没有在子类中实现接口方法,因此您将获得编译时错误。
testinter t = new testinter();
t.miniloan();
t.educationloan(); // these methods should be initialized
t.homeloan();
现在关于你的接口实现方式:
testinter t = new testinter();
t是子类的一个实例&可以像常规类对象一样使用。
interfa a = new testinter();
使用此方法的好处是,您已在代码中使用了a
n次参考。在将来,您希望将接口的实现更改为interfa a = new AnotherTestinter();
所有您需要做的就是更改实现,不会更改引用。这是松散耦合,否则您必须在代码中的任何位置更改引用a
。这种方法通常称为编程到接口。
使用anonymous类
interfa xx = new interfa(){ @覆盖 public void homeloan(){ } @覆盖 public void educationloan(){ // TODO自动生成的方法存根 } };
匿名类使您可以使代码更简洁。它们使您能够同时声明和实例化一个类。他们就像当地的班级,除了他们没有名字。如果您只需要使用本地类一次,请使用它们。
因此,执行此操作interfa xx = new interfa() {
可帮助您在同一位置定义方法educationloan() homeloan()
。
答案 1 :(得分:0)
N.B。我忽略了一件事,你将得到一个编译错误,因为你没有在子类中实现interfa的方法