Java基础入门:面向对象-抽象

121 阅读2分钟

抽象(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 多个接口

在继承多个接口时,如果多个接口有相同方法,重写该方法以解决默认方法冲突