/*
抽象类和接口的异同点:
相同点:
都是不断向上抽取而来的。
不同点:
1,抽象类需要被继承,而且只能单继承。
接口需要被实现,而且可以多实现。
2,抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。
接口中只能定义抽象方法,必须由子类去实现。
3,抽象类的继承,是is a关系,在定义该体系的基本共性内容。
接口的实现是 like a 关系,在定义体系额外功能。
犬按功能分:有导盲犬,搜爆犬。
abstract class 犬
{
abstract void 吼叫();
}
//abstract class 导盲 //不合适
interface 导盲
{
abstract void 导盲();
}
class 导盲犬 extends 犬 implements 导盲
{
public void 吼叫(){ }
public void 导盲(){ }
}
*/
package demo.oo;
/*
abstract class AbsDemo
{
abstract void show1();
abstract void show2();
}
当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用
另一种形式定义和表示,就是 接口 interface。
*/
//接口
interface Port {
//固定的修饰符
public static final int NUM = 4;
public abstract void show1();
public abstract void show2();
}
/*
在java中不直接支持多继承,因为会出现调用的不确定性。
所以java将多继承机制进行改良,在java中变成了多实现。
一个类可以实现多个接口。
*/
interface PortA {
public abstract void show();
}
interface PortB {
public abstract void show();
}
//接口间继承 多继承
interface PortC extends PortA, PortB {
}
//接口实现类
class DemoImpl implements Port {
// public static final int NUM = 4; //存在
@Override
public void show1() {
}
@Override
public void show2() {
}
}
//多实现
class MoreImpl implements PortA, PortB {
@Override
public void show() {
//同时覆盖A,B
System.out.println("接口的多实现");
}
}
//一个类在继承另一个类的同时,还可以实现多个接口。
class Parent {
public void method() {
}
}
class ChildImpl extends Parent implements PortA, PortB { //接口的出现避免了单继承的局限性
public void show() {
System.out.println("多个接口");
}
}
class ThreeImpl implements PortC {
//包含所有接口的方法A,B,C
@Override
public void show() {
System.out.println("接口间继承实现");
}
}
class Interface {
public static void main(String[] args) {
//接口实现
DemoImpl d = new DemoImpl();
System.out.println(d.NUM);
System.out.println(Port.NUM);
System.out.println(DemoImpl.NUM);
//多实现
MoreImpl m = new MoreImpl();
m.show();
//多接口
ChildImpl c = new ChildImpl();
c.show();
//接口继承接口
ThreeImpl t = new ThreeImpl();
t.show();
}
}