考虑以下界面:
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
时,我必须实现这两个,所以似乎没有
如果我在界面中写public
或abstract public
,则会有所不同。
由于
答案 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语言的人,需要先做一些澄清:
<强>接口强>
话虽如此, Java 8 ,我们现在拥有所谓的&#34; default methods。&#34;这些方法是完全实现的方法,需要使用default
关键字进行显式声明。
话虽如此,abstract
关键字永远不会在界面的上下文中发挥作用。
抽象方法:
抽象方法仅属于抽象类。
抽象类可以包含完全实现的方法以及抽象方法。但是,类中只有一个抽象方法足以使它成为一个抽象类 - 也就是说,类必须显式声明为抽象类。
答案 4 :(得分:-1)
抽象类是一个声明为abstract的类 - 它可能包含也可能不包含抽象方法。抽象类不能被实例化,但它们可以被子类化。