是否可以在没有抽象方法的情况下执行接口?

时间:2019-05-30 11:00:58

标签: java

程序执行时,如果在接口方法和嵌套接口方法中添加注释,则将执行。      因此,它是如何执行过程的。 它是默认方法吗?

interface it2
{
//void m1(); with this comment program is executing so, how it is 
prosessing
interface it1
{
//void m2();with this comment also program is executing so, how it is 
prosessing
}
};
class Demo implements it2.it1
{
 void m1()
{
    System.out.println("m1 method");

}

public  void m2()
{
    System.out.println("m2 method");
}
public static void main(String[] args)

{
    Demo t= new Demo();
    t.m1();
    t.m2();
}


}

输出-     m1方法     m2方法

1 个答案:

答案 0 :(得分:1)

首先整理一下并更正您的代码,以使其易于阅读:

public interface It2 {
    void m1(); 

    public interface It1 {
        void m2();
    }
}

public class Demo implements It2.It1 {
    public void m1() {
        System.out.println("m1 method");
    }

    public void m2() {
        System.out.println("m2 method");
    }

    public static void main(String[] args) {
        Demo t = new Demo();
        t.m1();
        t.m2();
    }
}

我认为您的困惑是,您认为m1中的It2方法与m1中的Demo方法之间存在某种关系。

实际上没有关系。

Demo类正在实现It1而不是It2。因此Demo::m2It1::m2的实现,但是Demo::m1没有实现任何接口方法。

因此,当您在m1中注释掉It2的声明时,没有什么区别。

一种证明这一点的方法是添加@Override批注:

    @Override
    public void m1() {
        System.out.println("m1 method");
    }

    @Override
    public void m2() {
        System.out.println("m2 method");
    }

编译器将对m1方法进行编译,表示该方法不会覆盖或实现任何内容。 m2不会有编译错误。


  

因此,它是如何执行过程的。它是默认方法吗?

不。这里没有默认方法。