继承与多态

来源:互联网 发布:淘宝客服链接 编辑:程序博客网 时间:2024/06/03 23:39

抽象类

  1. 使用场景
    1. 当多个类之间有关系并且包含相同功能,但是功能主体不同,可以考虑向上抽取,只抽取功能含义,不抽取功能主体。由于功能主体不知道,故该方法是抽象的,修饰方法为abstract,包含了抽象方法的类是抽象类,也需要在类上加abstract。
    2. 当不想让外界创建对象时,也可修饰类为abstract。
    3. 抽象类的特点
    4. 抽象类不可以创建对象。
    5. 若子类没有覆盖抽象类的所有抽象方法,那么子类也是一个抽象类。
    6. 抽象类可以没有抽象方法,但包含抽象方法的类一定是抽象类。

接口

  1. 使用场景
    当事物除了包含基本功能外,还有一些扩展功能,可将这些扩展功能抽象到接口中,是对外暴露的规则。
  2. 接口中成员的特点
    1. 变量:默认是常量,被修饰为public static final。
    2. 方法:默认是抽象方法,被修饰为public abstract。
  3. 接口在继承中的特点
    接口可以被子类多实现,因为接口的方法是抽象的,没有方法体,子类调用不会产生冲突。
  4. 接口与抽象类的区别
    1. 接口是like a,抽象类是has a,即接口提供扩展功能,是对外暴露的规则,而抽象类提供子类的基本功能。
    2. 当事物之间有内在联系时用抽象类,当只是有相同的操作时用接口。
    3. 子类能实现多个接口,但是只能继承一个抽象类。
    4. 接口的方法都是抽象的,抽象类可以没有抽象方法。

覆盖

  1. 使用场景

    1. 子类继承抽象类或者实现接口。
    2. 当子类要重新赋予一个方法的含义时。
  2. 覆盖注意事项

    1. 子类覆盖父类,子类方法权限必须大于父类。
    2. 静态只能覆盖静态。

多态

  1. 多态的体现:父类引用指向子类对象。
  2. 多态的好处:提高了代码的扩展性。
  3. 多态的弊端:只能使用父类中的成员。
  4. 多态的前提:多个子类继承或实现,并且覆盖。
  5. 多态中成员在编译时期和运行时期的特点
    1. 成员变量:编译和运行时期都参考引用
    2. 成员方法:编译时期参考引用,运行时期参考对象
    3. 静态成员方法:编译和运行时期都参考引用
    4. Object类中的equals()和toString()
    5. boolean equals():比较的是引用数据类型的对象地址值,不能比较基础数据类型,一般进行重写。
    6. String toString():利用hashCode()返回对象的地址,一般进行重写。

super

  1. super(属性):调用父类构造函数
  2. super.属性:访问父类同名属性
  3. super.方法名():访问父类的成员函数

final

  1. 类:不可以被继承,弥补了继承导致破坏封装性的问题
  2. 属性:常量,只能赋值一次,一般与static共同修饰
  3. 方法:不可以被覆盖
原创粉丝点击