接口
什么是接口? 当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用另一种形式定义和表示,就是接口interface
定义接口使用的关键字不是class,是interface.
对于接口当中常见的成员:而且这些成员都有固定的修饰符
1、全局常量:public static final
2、抽象方法: public abstract
由此得出结论,接口中的成员都是公共的权限。
interface Demo
{
public static final int Num=4;
public abstract void show1()'
public abstract void show2();
/*
public static final 、public abstract 可以省略,在接口里你没写程序会自动帮你添加
但是最好要写,省略的话可读性极差!!!
*/
}
类与类之间是继承关系,类与接口是实现关系
实现是接口有的,都得覆盖,继承是父类有的,可以拿来用,也可覆盖某些方法。
接口不可以实例化,只能由实现了接口的子类并覆盖了接口中所有的抽象方法后,该子类才可以实例化。
否则,这个子类就是一个抽象类。
class DemoImpl implements /*实现*/ Demo
{
public void show1(){}
public void show2(){}
}
class InterfaceDemo
{
public static void main (String[] args)
{
DemoImpl d = new DemoImpl();
System.out.println(d.Num);
System.out.println(DemoImpl.Num);
System.out.println(Demo.Num);
}
}
在Java 中不直接支持多继承,因为会出现调用的不确定性。
所以java将多继承机制进行改良,在Java中变成了多实现。
一个类可以实现多接口
多实现是怎么体现的?
interface A
{
public void show();
}
interface Z
{
public void show();
public int add(int a,int b);
}
class Test implements A,Z//多实现
{
public void show(){}
public int add(int a,int b)
{
return a+b+3;
}
}
一个类在继承另一个类的同时,还可以实现多个接口
class Q
{
public void method()
{}
}
class Test2 extends Q implements A,Z
{
实现...
}
接口的出现,避免了单继承的局限性。因为一个类只能有一个父类,但是可以有多个接口,想要对其功能进行扩展,可以用接口。
类与类之间继承关系,类与接口之间实现关系。接口与接口之间继承关系(可以进行多继承)。
interface CC
{
void show();
}
interface MM
{
void method();
}
interface QQ extend CC ,MM
{
void function();
}
class WW implements QQ
{
void show(){}
void method(){}
void function(){}
}
接口是对外暴露的规则、是程序的功能扩展,接口的出现降低耦合性、可以用来多实现
抽象类和接口的异同点
相同点 :
都是不断向上抽取而来的
不同点:
1、抽象类需要被继承,而且只能单继承。接口需要被实现,而且可以多实现。
2、抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。
接口中只能定义抽象方法,必须由子类去实现。
3、抽象类的继承是 is a 关系(这个类哪一类) ,在定义该体系的基本共性内容。
接口的实现是like a 关系(这个类像哪种) ,在定义体系额外功能。
abstract class 犬
{
abstract void 吼叫();
}
interface 导盲
{
abstract void 导盲();
}
class 导盲犬 extends 犬 implements 导盲
{
public void 吼叫 ()
{
}
public void 导盲(){}
}