抽象类与接口
抽象类
被abstract修饰的类称为抽象类,被abstract修饰的方法,被称之为抽象方法。抽象方法只能在抽象类和接口中出现。
public abstract class Student {
private String name;
private int sno;
public String getName() {
return name;
}
public void setName() {
this.name = name;
}
public int getSno() {
return Smo;
}
public void setSno(int sno) {
this.sno = sno;
}
//抽象方法(只有方法的声明,没有具体实现)
public abstract void play();
public abstract void sing();
}
抽象类的作用
在实际开发中,对某些需求的具体实现不确定是,可以将之定义为抽象方法,等后期子类进行实现,从而提高程序的扩展性。
抽象类特点
- 抽象类中可以包含普通类的一些特性(属性,方法,构造器)
- 抽象类中除了包含一些已实现的方法外还包含抽象方法(未实现)
- 抽象类存在构造器,但是不允许被实例化
- 抽象类一般由子类继承,但是子类继承了抽象类之后就必须实现抽象方法(除非子类也是抽象类)
- 抽象类也可以继承其他抽象类
- 如果子类继承了多个抽象类(多重继承) 则子类必须实现所有抽象类中未实现的方法
接口
接口(interface)是一种特殊的抽象类,本质上不是一个类,里面只能包含常量和方法的定义(不允许实现),接口就 是一套未实现方法的集合。
声明语法
[修饰符] 接口名称{ [常量定义]
[抽象方法的定义]
}
例如
public interface Flyable{
String NAME = "bird";
void fly();
从以上表现来看,接口中不存在像普通类一样的属性,以及普通方法,因此接口实际上就是一套标准,既然是标 准,那就必然存在实现,java中的类可以实现多个接口,从而弥补了类只能单继承的缺点。
实现类
public class Bird implements Flyable{
public void fly(){
System.out.println("自由自在的飞翔");
}
}
接口允许有多个子类继承实现。
同时在java中的类可以实现多个接口
public interface Singable{
void sing();
}
public class Bird implements Flyable,Sinable{
public void fly(){
}
public void sing(){
}
}
如果一个子类实现了多个接口,那么这个子类就必须实现所有的抽象方法(除非这个子类是抽象类).
注意事项:
- 接口中只能存在常量和抽象方法(JDK1.8以前)
- 接口允许继承接口,并且能多继承
- 接口不允许继承任何类(包括抽象类)
- 接口允许有多个子类实现,并且子类可以同时实现多个接口
- 接口不属于类,因此不存在构造器,所以也无法实例化
接口(标准)和抽象类(类)的区别
- 接口通常表示对行为(动词,或形容词)的抽象;抽象类一般为对具备相同的属性的类(名词)的抽象
- 接口中只允许常量和抽象方法;抽象类中具备普通的类所有特征,同时也支持抽象方法
- 接口允许多实现,接口允许继承多个接口;抽象类只能单继承
- 接口不存在构造器,无法实例化;抽象类虽然存在构造器,但是也无法实例