interface
interface可理解爲特殊abstract class,但相比abstract class,有以下區別:
- interface是完全abstract class,所有method默認都爲abstract method(可顯式使用abstract指定),且默認訪問權限爲public(若顯式指定訪問權限,也只能使用public)
- interface是純粹abstract class,純接口class,不允許有non-static數據成員
- interface所有method都爲abstract method,因此interface允許多重繼承,interface繼承本質就是abstract method(接口)的set union操作
- interface不允許有non-static數據成員,因此class允許多重繼承(實現)interface,不會有c++中的多份數據衝突
interface Jumpable
{
void jump();
}
interface Swimable
{
void swim();
}
interface Flyable
{
void fly();
}
interface Actions extends Jumpable, Swimable, Flyable
{
}
class Animal
{
}
class Fish extends Animal implements Swimable
{
public void swim()
{
System.out.println("Fish.swim()");
}
}
class Frog extends Animal implements Jumpable, Swimable
{
public void jump()
{
System.out.println("Frog.jump()");
}
public void swim()
{
System.out.println("Frog.swim()");
}
}
interface的類作用域
interface作爲特殊abstract class,自然也屬於class,而class有其自身類作用域,因此允許在interface中定義static成員(static數據成員和static方法成員)
- static數據成員:interface中定義數據成員默認爲public final static(若顯式指定也只能使用public&final&static組合),final修飾static數據成員,因此不允許blank final
- static方法成員:static方法成員必須實現
interface Jumpable
{
abstract void jump();
int jSpeed = 5;
}