• Java 中,实现抽象的机制有两种:抽象类和接口
  • 两者非常相似并且可以相互替换,所以开发者会随意选择,但是有很大不同

抽象是什么?

  • 定义:将一类对象的共同特征 总结出来 & 构造成一类事物的过程
    • 数据抽象 & 行为抽象
    • 只关注对象 哪些属性和行为
    • 不关注属性和行为的具体细节
  • 作用
    • 隐藏 行为功能: 构造出一组行为的抽象描述,但是这组行为可以有任意个可能的具体实现方式
    • 拓展 行为功能:具体实现表现为各种派生类,通过从抽象体派生,可以拓展模块的行为功能
  • 实现方式
    • 抽象类
    • 接口

抽象类

  • 定义
    • 一类对象的抽象集合
  • 作用
    • 对属性行为进行抽象
    • 延伸
      • 明确的抽象性:告诉开发者如何使用
      • 有用的重构性
  • 语法特点
    • 使用abstract 关键字
      • abstract 不能和 final 共同修饰一个类
    • 抽象类方法 = 抽象 / 不抽象
      • 不能与 private static final native 并列修饰一个方法
      • 含有抽象方法的类一定是抽象类
      • 抽象类不一定含有抽象方法
    • 抽象类不能被实例化
      • 子类必须重写
  • abstract class Animal {
        public abstract void cry();
    }
     
    class Cat extends Animal {
     
        @Override
        public void cry() {
            System.out.println("Cat: meow!");
        }
    }
     
    class Dog extends Animal {
     
        @Override
        public void cry() {
            System.out.println("Dog: Ho!");
        }
    }
     
    public class Test {  
     
        public static void main(String[] args) {  
            Animal a1 = new Cat();  
            Animal a2 = new Dog();  
     
            a1.cry();  
            a2.cry();  
        }  
    } 

接口