Java基础六--继承

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

继承的概念

  • 继承是类与类之间的一种关系
  • 使用已存在的类的定义作为基础建立新的类
  • 新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
  • 当两个类之间满足 “A is a B” 的关系,我们就说它们满足继承关系

继承的特点

  • 利于代码复用
  • 缩短开发周期

语法

  • 使用 extends 实现继承
  • Java 只支持单继承,一个类只能有一个父类(也称为超类、基类)

继承后的初始化顺序

父类的静态成员

子类静态成员

父类对象构建【属性(赋值)、构造代码块、构造方法】

子类对象构建【属性(赋值)、构造代码块、构造方法】


Super关键字

如何区分调用的是继承父类的方法还是子类自己重写的方法?

  • 访问父类成员方法

    1
    super.print();
  • 访问父类属性

    1
    super.name;

子类对象实例化时,能否选择父类的构造形式(调用指定的构造方法)?

  • 访问父类构造方法

    1
    2
    super();//无参的构造方法
    super("name");//有参的构造方法
  • 子类的构造过程中必须调用其父类的构造方法,默认调用无参的构造方法

  • 如果子类构造方法中既没有显示标注,而父类有没有无参的构造方法,则编译出错

  • 使用 super 调用父类指定构造方法,必须在子类的构造方法的第一行


this 关键字 & super 关键字

this 关键字——当前类对象的引用 super 关键字——父类对象的引用
访问当前类的成员方法
访问当前类的成员属性
访问当前类的构造方法
不能再静态方法中使用
访问父类的成员方法
访问父类的成员属性
访问父类的构造方法
不能再静态方法中使用

构造方法调用时,super 和 this 不能同时出现


重写 & 重载

方法重写 方法重载
在满足继承关系的子类中
方法名、参数个数、顺序、返回值与父类相同
返回值类型与父类的返回值类型向下兼容
访问修饰符的限定范围大于等于父类方法
在同一个类中
方法名相同
参数个数、顺序、类型不同
返回值类型、访问修饰符任意

方法重写存在,属性重写不存在


Object 类

  • Object 类是所有类的父类

  • 一个类没有使用 extends 关键字明确标识继承关系,则默认继承 Object 类(包括数组)

  • Java 中的每个类都可以使用 Object 中定义的方法

    Object 类的常用方法

方法 说明
toString() 返回当前对象本身的有关信息,按字符串对象返回
equals() 比较两个对象是否是同一个对象,是则返回true
hashCode() 返回该对象的哈希代码值
getClass() 获取当前对象所属的类信息,返回Class对象

final关键字

final 表示“最后的、最终的”含义,变量一旦赋值后,不能被重新赋值。被 final 修饰的实例变量必须显式指定初始值。

  • 被 final 修饰的类表示不允许被继承
  • 被 final 修饰的方法表示不允许被子类重写
    • final 修饰的方法可以被继承
    • 不能修饰构造方法
  • 被 final 修饰的变量表示不允许被修改
    • 方法内部的局部变量 —> 在使用之前被初始化赋值即可
    • 类中的成员变量 —> 只能在定义时或者构造代码块、构造方法中进行初始化设置
    • 基本数据类型的变量 —> 初始赋值之后不能更改
    • 引用类型的变量—>初始化之后不能再指向另一个对象,但指向的对象的内容时可变的
    • 不能修饰构造方法
  • 可配合 static 使用,表示静态的、不允许被修改的信息
  • 使用 final 修饰可以提高性能,但会降低可扩展性

注解

可以声明在包、类、属性、方法、局部变量、方法参数等的前面,用来对这些元素进行说明、注释

按照运行机制分

  • 源码注解
  • 编译时注解
  • 运行时注解

按照来源分

  • 来自 JDK 的注解

  • 来自第三方的注解

  • 自定义注解

-------------本文结束感谢您的阅读-------------

本文标题:Java基础六--继承

文章作者:Cui Zhe

发布时间:2018年10月17日 - 08:10

最后更新:2018年10月21日 - 10:10

原始链接:https://cuizhe1023.github.io/2018/10/17/Java基础六/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。