😃 JAVA基础——抽象类与接口的关系
抽象类
抽象类的用途
抽象类是用于束缚和规范代码结构而存在的,它定义了子类需要的抽象方法,并且子类无法修改父类中的抽象方法。
抽象类的创建
抽象类需要关键字abstract修饰,类中可以包含抽象方法和普通的方法,
package Abstract;
public abstract class Person {
public void play() {
System.out.println("人们需要游戏");
}
public abstract void say();
public abstract void eat();
}
抽象方法
在抽象类中,可以包含抽象方法和其他方法;抽象方法也需要关键字abstract进行定义,并且没有方法体;在子类继承抽象类的时候,必须实现父类的抽象方法,从而达到对子类方法的规范。
抽象类的特点
- 抽象类不能够实例化,但是可以像多态一样,父类引用子类的实例对象。
- 抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类。
- 如果子类继承抽象类,必须实现抽象类的抽象方法。
- 如果子类不实现抽象类的抽象方法,那么子类一定是抽象类。
接口
接口的目的
接口是为了解决java无法多继承的弊端,并且接口可以多继承;接口和抽象类类似,也是为了规范和约束实现类的行为。
接口的创建
定义接口不再是类,用关键字interface来定义接口,而类实现接口需要在类名前加上implements关键字。
//不能有构造方法和普通方法。
package Interface;
public interface Life {
String NAME = "种族名称";
//与 public abstract final String NAME = "种族名称"; 相等。
public abstract void say();
// public abstract 可以省略。
}
实现接口的类:
package Interface;
public class TestLife implements Life {
@Override
public void say() {
System.out.println("说话");
System.out.println(Life.NAME);
}
}
接口的特性
- 接口不能够实例化。
- 接口中只能够有常量和抽象方法。
- 接口可以继承多个接口。
- 接口实现类必须实现接口的所有抽象方法,除非接口实现类为抽象类。
接口和抽象类的对比
抽象类 | 接口 | |
---|---|---|
定义所需关键字 | abstract | interface |
组成 | 正常类和抽象方法 | 常量和抽象方法 |
使用 | 继承 | 实现和继承 |
关系 | 实现接口 | 不能继承抽象类 |
局限 | 单继承 | 可以多继承 |
重载 | 不能被重载 | 不能被重载 |
😐 😃 😦 好好玩