Java中继承特点的总结


继承的概念

  • 将父类(基类)的属性和方法给予子类(派生类);
  • 一种类与类的关系;
  • 使用已存在的类的定义作为基础建立新的类;
  • 新类的定义可以增加新的数据或者新的功能,也可以用父类的功能,但不能选择性地继承父类;
  • 两个类满足”A is a b”的关系是就可以使用继承。

继承的实现

  • 利用extends实现继承;
  • 只能支持单一继承,只有一个父类。
//子类
Class Cat extends Animal{

}
//父类
Class Animal{

}
  • 此时父类的所有属性和方法都会在子类中存在

方法重写和方法重载

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

super关键字的使用

  • super关键字主要是用来调用多参父类构造方法的。在默认情况下,实例化子类的过程中,虚拟机默认调用的是父类的无参构造方法,如果用户与要调用父类的多参构造需要使用super关键字;
  • 代表父类引用;
  • 子类对象的构造过程中必须调用其父类的构造方法;
  • 如果子类的构造方法中没有显示标注,则系统默认调用父类的无参构造方法;
  • 如果子类构造方法没有显示标注,且父类没有无参构造方法,系统将提示错误;
  • 使用super调用父类指定构造方法,必须要在子类的构造方法的第一行。
public void Cat(){
    super("xxx",18);
    System.out.println("这是子类的无参构造方法");
}

super.print();   //访问父类成员方法
super.name;     //访问父类属性
super();        //访问父类构造方法
  • 注意super关键字只能在子类构造方法中使用,且必须位于构造方法的第一行。

子类实例化时的程序执行顺序问题

  • 总结一下来说是,父类与静态代码块先行,子类、构造代码块以及构造方法紧随其后;
  • 父类静态成员->子类静态成员->父类对象构造->子类对象构造。
/**
*我是父类的静态代码块
*我是子类的静态代码块
*我是父类的构造代码块
*我是父类的多参构造方法
*我是子类的构造代码块
*我是子类的无参构造方法
**/

this关键字与super关键字的对比

  • this关键字用来调用当前类允许被访问的属性和方法;
  • super关键字用来调用父类当中允许被访问的属性和方法;
  • thissuper关键字都不能在静态方法中被使用;
  • thissuper不能同时出现在同一个构造方法中,一个关键字只能出现在一个构造方法中。

访问修饰符

访问修饰符 本类 同包 子类 其他
private $\checkmark$
默认 $\checkmark$ $\checkmark$
protected $\checkmark$ $\checkmark$ $\checkmark$
public $\checkmark$ $\checkmark$ $\checkmark$ $\checkmark$

Object关键字

  • Object类是所有类的父类;
  • Java中的每一个类都可以使用Object中定义的方法。
equals()
toString()

final修饰符

  • 修饰类表示不允许被继承;
  • 修饰方法表示不允许被子类重写;
  • 修饰变量表示不允许修改;
  • final修饰的方法可以被继承;
  • 引用类型的变量:初始化之后不能再指向另一个对象,但指向的对象的内容是可以变动的;
  • 可以配合static使用。

注解

  • 可以声明在包、类、属性、方法、局部变量、方法参数的前面,用来对这些元素进行说明、注释。
按照运行机制分类 按照来源分类
源码注解 来自JDK的注解
编译时注解 来自第三方的注解
运行时注解 我们自己定义的注解

文章作者: 南航古惑仔
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 南航古惑仔 !
  目录