Interface中的公共方法和抽象方法有什么区别?

时间:2013-12-24 01:31:37

标签: java interface

考虑以下界面:

public interface MyInterface {

    public void func1();
    public void func2();
    abstract public void func3();

}

和MyClass类:

public class MyClass implements MyInterface{

    @Override
    public void func1() {
        // TODO Auto-generated method stub

    }

    @Override
    public void func2() {
        // TODO Auto-generated method stub

    }

    @Override
    public void func3() {
        // TODO Auto-generated method stub

    }
}

func2()func3()之间有什么区别?

当我想要实现MyClass时,我必须实现这两个,所以似乎没有 如果我在界面中写publicabstract public,则会有所不同。

由于

5 个答案:

答案 0 :(得分:10)

Java 7及更早版本:

没有区别,因为所有接口方法都是公共的和“抽象的”。这是暗示是否宣布。

Java 8:

同样的规则适用于Java 7,但是,应该注意的是,从Java 8开始,只有非默认方法才是“抽象的”。事实上,Default methods允许实施。

Java 9:

在Java 9中,我们提供了更大的灵活性,并且还允许private methods

答案 1 :(得分:7)

Java Language Specification quote

  

接口主体中的每个方法声明都是隐式的   抽象,所以它的主体总是用分号表示,而不是   块。

你问

  

func2()和func3()有什么区别?

除了它们是不同的方法之外,它们的修饰语是相同的。

答案 2 :(得分:2)

Interface中的公共方法和抽象方法有什么区别?

9.1.1.1. abstract Interfaces 简单地说......没有。根据这个,它已经过时了。

答案 3 :(得分:0)

在某种程度上,我们在这个问题中比较苹果和橘子。对于刚接触Java语言的人,需要先做一些澄清:

<强>接口

  • 接口包含方法存根。这些是没有正文的方法。 这些方法是含蓄的&#34;抽象的&#34;我们不需要明确使用修饰符来表示这一点。
  • 话虽如此, Java 8 ,我们现在拥有所谓的&#34; default methods。&#34;这些方法是完全实现的方法,需要使用default关键字进行显式声明。

  • 话虽如此,abstract关键字永远不会在界面的上下文中发挥作用。

抽象方法:

  • 抽象方法属于抽象类。

  • 抽象类可以包含完全实现的方法以及抽象方法。但是,类中只有一个抽象方法足以使它成为一个抽象类 - 也就是说,类必须显式声明为抽象类。

答案 4 :(得分:-1)

抽象类是一个声明为abstract的类 - 它可能包含也可能不包含抽象方法。抽象类不能被实例化,但它们可以被子类化。