Java 面向对象(下)

P343-

1. 抽象类

随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得 非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。

abstract关键字的使用

  1. abstract:抽象的
  2. abstract可以用来修饰的结构:类、方法
  3. abstract修饰类:抽象类

注意:

  1. 此类不能实例化。
  2. 抽象类中 一定有构造器,便于子类实例化时调用(涉及:子类对象实例化的全过程)。
  3. 开发中,都会提供抽象类的子类,让子类对象实例化,完成相关的操作。
  4. abstract修饰方法:抽象方法
  5. 抽象方法 只有方法的声明,没有方法体
     abstract public void breath();
    
  6. 包含抽象方法的类,一定是一个抽象类。反之,抽象类中可以没有抽象方法的。
  7. 若子类 重写了父类中的所有的抽象方法后,此子类方可实例化。若子类没有重写父类中的所有的抽象方法,则此子类也是一个抽象类,需要使用 abstract 修饰。
  8. 抽象类的构造方法定义为 protected,因为只能被子类调用。

2. 接口

2.1 接口的定义

  • 一方面,有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果
  • 另一方面,有时必须从几个类中抽取出- - 些共同的行为特征,而它们之间又 没有is-a的关系,仅仅是具有相同的行为特征而已。例如:鼠标、键盘、打印机、扫描仪、摄像头、充电器、MP3机、手机、数码相机、移动硬盘等都支持USB连接。
  • 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要...则必须能...”的思想。继承是一个"是不是"的关系,而接口实现则是"能不能"的关系
  • 接口的本质是契约,标准,规范,就像我们的法律一样。制定好后大家都 要遵守。

2.2 接口的使用

  1. 接口使用 interface 来定义
  2. Java中,接口和类是并列的两个结构
  3. 如何定义接口:定义接口中的成员
    • JDK7及以前:只能定义全局常量和抽象方法
    • 全局常量: public static final 的。 但是书写时,可以省略不写
    • 抽象方法:public abstract
    • JDK8:除了定义 全局常量和抽象方法之外,还可以定义静态方法、默认方法(略)
      // 定义接口
      interface Flyable {
      public static final int Max_VALUE = 7900;
      int MIN_VALUE = 20;
      public abstract void fly();
      void stop();
      }
      
  4. 接口中不能定义构造器的! 意味着接口不可以实例化
  5. Java开发中, 接口通过让 类去实现(implements)的方式来使用

    • 如果 实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化
    • 如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类

      // 类实现接口
      class Plane implements Flyable {
      public Plane() {}
      
      @Override
      public void fly() {
        System.out.println("飞机起飞");
      }
      
      @Override
      public void stop() {
        System.out.println("飞机降落");
      }
      }
      
  6. Java类可以实现多个接口 --- >弥补了Java单继承性的局限性

    格式: class AA extends BB implements CC,DD,EE
  7. 接口与接口之间可以继承,而且可以多继承
  8. 接口的具体使用,体现多态性。
  9. 接口,实际上可以看做是一种规范。
  10. 开发中,体会面向接口编程。