1.接口的概念
接口是抽象类的更近一步(比抽象类还抽象) 抽象类只是不能实例化,但是其他的各个方面都和普通的类差不多。 接口就更抽象了,不仅不能实例化,同时也不具备类的各种特性。 接口中也可以放抽象方法,这里的抽象方法不必写abstract关键字(写或者不写都是抽象方法),不能放普通方法,只能放抽像方法。 虽然draw没写public和abstract,但是也表示是一个抽象的公有的方法。 接口中也不能放普通的属性,只能放public static final修饰的属性。 接口不能继承自其他的类,但是可以继承自其他的接口。 接口不能被类继承,而是被其他的类"实现" 某个类实现了这个接口 抽象类和接口的区别
抽象类和普通的类差不多,只是不能被实例化,而接口和普通的类相差甚远(包含属性,方法,和其他类的关系) 一个类只能继承自一个抽象类,但是一个类可以同时实现多个接口。(接口的实现就是为了 解决Java中不能多继承的问题,Java的继承是单继承,但是有些场景中多继承是有用的,Java中可以通过继承一个类,实现多个接口的方式来完成类似于多继承的效果)。
public interface Shape {
int num = 10 ;
public static final int n = 10 ;
void draw ( ) ;
}
public class Rect implements Shape {
@Override
public void draw ( ) {
System. out. println ( "□" ) ;
}
}
接口中不包含实例属性。 接口存在的意义: 既能够实现类似于多继承的效果,同时又能规避多继承带来的问题。 接口相当于是一种约束,要求实现该接口的类,必须重写所有接口中的抽象方法。 接口是一个非常有用的语法机制,如果所有的代码都是一个人完成的,此时接口的意义就不大了,如果这个代码需要很多人协同开发完成的,此时接口就非常具有意义。
abstract public class Animal {
protected String name;
public Animal ( String name) {
this . name= name;
}
}
public interface IRunning {
void run ( ) ;
}
public class Cat extends Animal implements IRunning {
public Cat ( String name) {
super ( name) ;
}
@Override
public void run ( ) {
System. out. println ( name+ "四条腿在跑" ) ;
}
}
public interface ISwimming {
void swim ( ) ;
}
public interface IFlying {
void fly ( ) ;
}
public class Bird extends Animal implements IRunning {
public Bird ( String name) {
super ( name) ;
}
@Override
public void run ( ) {
System. out. println ( name+ "一跳一跳的跑" ) ;
}
}
public interface IAmphibious extends IRunning , ISwimming {
}
public class Frog extends Animal implements IAmphibious {
public Frog ( String name) {
super ( name) ;
}
@Override
public void run ( ) {
}
@Override
public void swim ( ) {
}
}
public class Duck extends Animal implements IRunning , IFlying, ISwimming {
public Duck ( String name) {
super ( name) ;
}
@Override
public void fly ( ) {
System. out. println ( name+ "正在飞" ) ;
}
@Override
public void run ( ) {
System. out. println ( name+ "一摇一摆的跑" ) ;
}
@Override
public void swim ( ) {
System. out. println ( name+ "两条腿在游泳" ) ;
}
}
一个类可以实现多组接口,表示不同的约束条件,每个接口里面又可以有多个抽象的方法。 实现多个接口需要接口之间用逗号隔开。 接口和接口之间是可以继承的(说是继承,表述成组合合理)