接口类实际上就是一个抽象类!
接口、抽象类与具体类三者之间的区别:
1、抽象类中可以有抽象方法,也可以有实例方法。而接口中所有的方法都是公开的抽象的方法。
2、具体类和抽象类之间通过extends完成继承。而具体类和接口之间通过implements完成方法实现,不叫作继承。
3、抽象类中可以有实例属性。而接口中所有的属性都是公开的静态的常量。
4、抽象类中可以有构造方法。而接口中没有构造方法。
5、在内存中有抽象类的对象。而没有接口的对象。
6、一个具体类只能继承一个抽象类。而一个具体类可以实现多个接口。
7、具体类和抽象类之间只能是单继承。接口和接口之间也可以继承,可以多继承。
8、抽象类可以继承一个类(可以是抽象类,也可以是具体类),接口不能继承类。
不同的表现形式:
具体类
public class Car{
private int max_speed;
public void setMaxSpeed(int max_speed)
{
this.max_speed=max_speed;
}
}
public class QQ extends Car{
}
抽象类
public abstract class Car{
private int max_speed;
public void setMaxSpeed(int speed)
{
this.max_speed=speed;
}
public abstract setMaxStopSpeed(int speed);
}
public class QQ extends Car{
private String name;
public setMaxStopSpeed(int speed)
{
………………
………………
}
}
接口类
public interface Car{
public static final int max_speed;
public abstract void setMaxSpeed(int max_speed);
}
public class QQ implements Car{
public void setMaxSpeed(int max_speed)
{
…………………………
…………………………
}
}
接口和抽象类同样不能new 实例化对象,抽象类通过继承子类可以自动在内存中创建对象,但接口在子类实现后内存中没有对象,抽象类、接口可以定义引用。
接口在哪里呢???
1、接口可以声明变量
2、接口可以声明方法的参数
3、接口可以声明方法的返回值类型
4、可以强制类型转换
综上:实际接口就是一种数据类型!
抽象类、接口统称为抽象层
两者如何使用?
1、当抽象层中没有实例属性和实例方法,只有抽象方法时,要做成接口(原因:抽象类在子类创建对象时会自动在内存中创建抽象对象,消耗内存)
2、当抽象层中既有实例属性或者实例方法,又有抽象方法时,要做成抽象类!
如果一个类要实现一个接口,则必须要实现接口中所有的抽象方法,该类可以是抽象类,也可以是具体类。
如果一个类继承抽象类,且只实现了抽象类中的部分抽象方法,则该类必定为抽象类。
一个抽象类实现一个接口,可以不实现其中的部分方法或者全部抽象方法,在抽象类的子类中实现
Book.java
public interface Book {
public abstract void readBooks();
}
文学.java
public abstract class 文学 implements Book {
}
语文.java
public class 语文 extends 文学 {
public void readBooks() {
}
}