今天说一下java中抽象类和接口,之前学过C#对抽象类和接口都有接触过,但是到了java基础中,又学了一边,对抽象类和接口有了更深,更细致的理解。之前学的时候,懵懵懂懂,嗯。。。。哦。。。。昂。。。今天来好好的总结一下。
首先声明,接口和抽象类的使用都是离不开多态的!不明白多态的小伙伴,先看看什么是多态。
抽象类的特点:
抽象类和抽象方法必须使用abstract关键字修饰。
public abstract class 类名{}
public abstract void eat();
抽象类中不一定有抽象方法,但是有抽象方法的一定是抽象类。
抽象类不能被实例化直接使用。
问题:那么抽象类怎么使用?利用多态的方式,通过子类对象实例化,叫抽象类多态。
抽象类的子类:
1 要么重写抽象类中的所以有方法 2 要么是抽象类
抽象类成员的特点:
成员变量:在抽象类里可以定义变量,可以定义常量。
构造方法:有构造方法,但是不能不能实例化。作用,用于子类访问父类数据的初始化。
成员方法:可以有抽象方法:子类必须实现的方法。也可以有非抽象方法:提高代码的服用性。
接口的特点:
接口用interface修饰
public interface 接口名 {}
类实现接口用implements表示
public class 类名 implements 接口名 {}
接口和抽象类一样也不能被实例化,直接使用。
使用方式:利用多态的方式,通过子类对象实例化,叫接口多态。
多态的几种形式:具体类多态,抽象类多态,接口多态。我们在使用的过程中很少去用具体类多态,个人觉得具体类里面东西写的比较死,不灵活。
接口的实现类:
1 要么重写接口中的所有抽象方法 2 要么是抽象类
接口的成员特点:
成员变量:只能是常量。
默认修饰符 Public static final
例如: 下面的两种形式都一样的,不写的话,用的时候会默认加上。
public interface People{
int number=10;
}
public interface People{
pubilc static final int number=10;
}
构造方法:接口没有构造方法,接口是对行为的抽象,没有具体的存在。
一个类如果没有父类,默认继承自Object类。
成员方法:
只能是抽象方法。 修饰符:Public abstract
例如: 下面两种方式是一样的。
public interface People{
void work();
}
public interface People{
public abstract void work();
}
区别:
区别 | 成员区别 | 关系区别 | 设计理念区别 |
抽象类 | 常量,变量,抽象方法,构造方法,非抽象方法 | 类和类继承,单继承。 |
对类抽象,包括属性、行为 |
接口 | 常量,抽象方法 | 类和接口实现,单实现,多实现。 接口与接口可以继承,单继承,多继承。 |
对行为抽象 |
什么时候用抽象类,什么时候用接口?首先没有绝对的说法,要根据情况来订。
例如:一个门,可以打开,关闭。那么我们既可以用接口也可以用抽象类。然后这个门多了个警报功能。那么代码怎么写。
如果,我们还是都写在接口和抽象类中,那么有别的门不会警报,但是你写死了,必须实现警报这个方法,那就不行了。
所以推荐还是抽象类中,写打开和关闭方法。 接口中写警报方法,这样最好。接口是对行为的抽象。
public interface Alram{
void alarm();
}
public abstract class Door{
public abstract void open();
public abstract void close();
}
public class AlarmDoor extends Door implements Alarm{
public void open(){
//...
}
public void close(){
//...
}
public void alarm(){
//...
}
}