Java 抽象类和接口 理解抽象类和接口
0X00抽象类&接口简介
抽象类
- abstract 抽象修饰符——抽象就是为了让子类集成的,并不能直接实现一个对象
- 抽象类中所有抽象方法都要在子类中实现
- 拥有抽象方法的类必须声明为抽象类
- 抽象类可以有非抽象的方法
接口
- interface 接口修饰符——接口是为了让类实现的
- 变量默认是public static final并且不能改变
- 方法默认是public abstract并且不能改变
- 接口不实现方法
0X01抽象类和接口的区别
- 抽象类可以实现方法细节,接口不能
- 抽象类的变量可以是各种类型的,接口不能
- 抽象类可以有静态代码块和静态方法,接口不能
- 一个类可以实现多个接口,而只能继承自一个抽象类
- 继承可以理解成“是不是”,接口可以理解成“有没有”
0X02举个例子
有一个接口CanFly
java
1public interface CanFly {
2
3 public abstract void fly();
4
5}有一个抽象类Bird
java
1public abstract class Bird {
2
3 int age;
4
5 void eat(){
6 System.out.println("I can eat insect~");
7 }
8
9}有一个Sparrow类继承自Bird
java
1public class Sparrow extends Bird implements CanFly{
2
3 public void fly(){
4 System.out.println("I can fly");
5 }
6
7}有一个抽象类Airplane
java
1public abstract class Airplane {
2
3 double price;//价格
4
5 void Crash(){ //坠毁
6 System.out.println("This airplane is crashed!");
7 }
8
9}有一个Jian_10类继承自Airplane
java
1public class Jian_10 extends Airplane implements CanFly{
2
3 public void fly(){
4 System.out.println("I can fly");
5 }
6
7}有一个包含主方法的类来测试
java
1public class Main {
2
3 public static void main(String[] args) {
4 Jian_10 A_0 = new Jian_10();//实例化A_0号战机
5 Sparrow xiaoMing = new Sparrow();//没错,这只麻雀叫小明
6
7 //我们都能飞
8 A_0.fly();
9 xiaoMing.fly();
10
11 //小明吃饭了
12 xiaoMing.eat();
13
14 //战机坠毁了
15 A_0.Crash();
16 }
17
18}运行结果是这样的
1I can fly
2I can fly
3I can eat insect~
4This airplane is crashed!0X03粗略解释
大概是这么回事: Airplane和Bird是两个抽象类,Jian_10和Sparrow分别继承自他们,所以子类可以直接调用父类的方法。且Jian_10和Sparrow还有接口CanFly 。然后Jian_10和Sparrow实现了接口CanFly中声明的fly方法(必须实现)。 如果以后想要修改Airplane和Bird两个父类的方法的时候,比如我不想让Bird吃东西了或者Airplane不会坠毁了,就只需要修改Airplane和Bird中相应的方法。
一个类只能继承自一个类&抽象类,但是可以实现多个接口
比如,Airplane和Bird有很多相同的方法,但是实现不尽相同,我们就可以把这些方法放到一个接口中。
如果这篇文章对你有帮助,可以请我喝杯咖啡 ☕
评论