当我在子类主要方法中访问接口时,我正在学习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();

    }
}


我的问题来了,哪种人可以在哪种情况下使用,有什么区别???

最佳答案

首先,您会在未实现子类中的接口方法的情况下获得大量的编译时错误。

 testinter t = new testinter();
        t.miniloan();
        t.educationloan(); // these methods should be initialized
        t.homeloan();


现在,关于您的界面实现方式:


testinter t = new testinter();


t是子类的实例,可以像常规类对象一样使用。


interfa a = new testinter();


使用这种方法的好处是,您在代码中使用了n次引用a,将来您想将接口的实现更改为interfa a = new AnotherTestinter();,您所要做的就是更改引用的实现。被改变。这是松散耦合,否则您必须在代码中的任何地方更改引用a。这种方法通常称为接口编程。


使用anonymous

interfa xx =新的interfa(){
@Override
公共无效的homeloan(){
}
@Override
公共无效的Educationloan(){
// TODO自动生成的方法存根
}
};


匿名类使您可以使代码更简洁。它们使您可以同时声明和实例化一个类。它们就像本地类,只是它们没有名称。如果只需要使用一次本地类,则使用它们。
因此,执行interfa xx = new interfa() {可帮助您在同一位置定义方法educationloan() homeloan()

10-06 15:54