天天看点

继承、接口和抽象类

继承:突出的特点

继承、接口和抽象类

extends关键字

对象有很多,有共同点,可以分成若干类别,共同点提取出来,形成父类,其他类成为子类。

子类也会继承父类的父类的所有属性和方法(但不能直接访问private成员)

子类有相同方法时,会优先调用自己的。

单根继承原则:每个类只能继承一个类 不写extends,默认继承Java.lang.object类。

默认类有。。。

构造函数 :子类构造函数第一句话默认调用父类的无参数构造函数super(),除非子类构造函数第一句话是super,而且super必须放在第一条,不会出现两条super。

抽象类和接口

  • 抽象类

    类:属性(0或者多个)+方法(0或者多个)

    完整健康的类:所有方法都有实现。

    可以没有方法,但是有方法就肯定有实现,才是一个完整的类。

    完整的类才可以被实例化,new出来。

    暂时有方法未实现,则被定义为抽象类。

    抽象类关键字 abstract 没有大括号。

    抽象类组成:成员变量,个数不限;具体方法,方法有实现,个数不限;抽象方法加abstract关键字,个数不限。

    abstract class A{} //类被定义为抽象的。不能new。

    抽象类也是类,继承了抽象类就不可以继承其他类。

    子类继承抽象类,必须实现所有未实现的方法,才能不是抽象类了。

  • 接口

    如果一个类里所有方法都没有实现,那么这个类就是接口interface。也是.java 编译出来也是.class

    类只可以继承一个类,但是可以实现多个接口,继承和实现可以同时实现。

    接口不算类,或者说是特殊的类。接口设计弥补单根继承的不足。单根继承不够灵活。

    继承、接口和抽象类

    类实现接口必须实现所有未实现的方法。如果没有全部实现,那么只能成为抽象类。

    接口可以定义变量,但是一般只能是常量。

继承、接口和抽象类

继承必须放在实现前面。

抽象类可以有private/protected,接口方法都是public。

转型、多态和契约设计

  • 类转型
    • 类型可以相互转型,只限制于有继承关系的类。
      • 子类可以转换成父类,但是父类不可以转换成子类。
      • 子类继承父类所有财产,由大变小是可以的,变成父类。但是父类不可以变成子类。
        继承、接口和抽象类
      • 父类转为子类有一种情况例外。如果这个父类本身就是子类转化来的。
      继承、接口和抽象类
  • 多态
    • 类型转换带来的作用就是多态。
    • 子类继承父类所有方法,但子类可以重新定义一个名字,参数和父类方法一样的方法,这个行为就是 重写。(不是重载)。子类的方法替换掉父类的。
    • 子类方法高于父类。
    继承、接口和抽象类
    • 多态的作用
      • 以统一的接口来操纵某一类中不同的对象的动态行为
      • 对象之间的解耦
        继承、接口和抽象类
    • 契约设计
    • 契约:规定规范了对象应该包含的行为方法。
    • 接口定义了方法的名称、参数和返回值,规范了派生类的行为
    • 基于接口,利用转型和多态,不影响真正方法的调用,成功将调用类和被调用类解耦
    继承、接口和抽象类
    new接口同时必须实现所有方法,匿名类只在里面用一次就结束了。只需要传入一个对象。