抽象(Abstraction)
- 抽象:从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程
- 面向对象编程中的抽象:只向用户展示对象的本质特征,隐藏内部细节以降低复杂性
- 抽象举例:对不同平面图形求面积
- 只需要知道“一个对象做什么”而不是“它是怎么做到的”
- 实现方式
- 抽象方法/抽象类
- 接口
抽象方法和抽象类
- 抽象方法
- 用
abstract修饰的方法 - 没有方法体,只有方法签名
- 抽象方法不能定义成
private
- 用
public abstract class Animal {
// abstract 不能用 final,static,private
public abstract void makeSound();
abstract void move();
private static void walk() {
System.out.println("Animal is walking");
}
public static void main(String[] args) {
walk();
}
}
- 抽象方法定义语法
- 修饰符
abstract返回值 方法名(参数列表);
- 修饰符
- 抽象类
- 用
abstract修饰的类 - 抽象类不能实例化,要用的话只能继承
- 继承抽象类的子类必须实现父抽象类中的全部抽象方法
- 非抽象方法可以在抽象类中实现
- 用
- 抽象类定义语法
abstract class 类名 {}
接口Interface
- 接口是一组合约规范,可用于实现100%抽象,实现类必须遵守
// 接口代表某种能力,某种功能行为 able
public interface InterfaceDemo {
// public static final int NUMBER = 100;
int NUMBER = 100;
// public abstract void method();
void method();
}
- 接口就像类一样,指定类必须实现的行为
- 两个关键字:interface/implements
- 在JDK1.8之前接口中只有静态常量和抽象方法,Java8开始接口中可以有默认方法和静态方法
public interface Flyable {
// 在接口中的静态方法不能被实现类 Override
static void prepare() {
System.out.println("Preparing");
}
void fly();
default void showStatus() {
System.out.println("我要飞的更高!");
}
}
- 接口中的字段只能是 public static final,接口中的方法为 public abstract
- 一个类只能 extends 一个类,但可以 implements 多个接口
在继承多个接口时,如果多个接口有相同方法,重写该方法以解决默认方法冲突