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;
}