2023年3月3日大约 3 分钟JavaJava基础
一种类与类之间的关系,使用已存在的类的定义作为基础建立新类,新类(子类、派生类)的定义可以增加新的数据或新的功能,也可以用父类(基类)的功能,但不能选择性的继承父类
- 子类会继承父类所有 public类型的实例变量和方法,但不会继承父类所有的private类型变量和方法
初始化顺序
- 父类静态成员 > 子类静态成员 > 父类对象构造 > 子类对象构造 
- 访问修饰符不影响成员加载顺序,跟书写位置有关 
特点
- 利用代码复用
- 缩短开发周期
- 单继承:子类只能继承一个父类
- 父类的私有成员子类不可继承
- 父类的构造方法不允许被继承,不允许被重写
- 子类构造方法默认调用父类的无参构造
格式
class Animal{
}
class Dog extends Animal{
}super
表示父类对象的引用
- 调用父类可访问的属性 
- 调用父类方法 
- 调用父类指定构造方法,要放在子类构造方法的 第一行 
- 子类的构造过程中必须调用其父类的构造方法 
- 如果子类的构造方法中没有显示标注,则系统 默认调用父类的无参构造方法 - 此时如果父类没有无参构造,则会产生编译错误
 
- 不能在静态方法中使用 
- 不能与 - this()共存
// 调用父类属性
super.month;
// 调用父类方法
super.eat();
// 调用父类构造方法
super();
super(name, month);final 关键字
- 修饰类:表示该类不允许被继承,publicfinal关键字顺序可颠倒- public final class Animal{}
 
- 修饰类方法:表示该方法不允许被子类重写,不能用来修饰构造方法- public final void eat(){}
 
- 修饰方法内局部变量:只要在具体使用之前进行赋值即可,一旦赋值不允许被修改- final int num; num = 10;
 
- 修饰内部成员属性:若定义时未被初始化,则只能在构造函数或构造代码块中赋值- private final String name;
 
- 修饰对象,对象的引用不可变,但对象的属性值可变
- 可配合 static使用修饰方法和变量- public static final int num = 10;
- 只需要加载一次后续不需要修订的配置信息
- final修饰的静态变量值必须在声明或静态初始化程序中赋值
 
- 可提高性能,但会降低可扩展性
Object 类
- 是所有类的父类 
- 一个类没有使用 extends 关键字明确标识继承关系,则默认继承 Object 类(包括数组) 
- 每个类都可以使用 Object 类中定义的方法 
方法重写
- 在子类中定义,重写父类中的方法
- 方法名和参数列表(类型、个数、顺序)与父类完全一致,与方法参数名无关
- 父类中的静态方法不能被子类重写
- 父类和子类具有相同名称的静态方法时,当子类对象向上转型后,只能调用到父类原有的静态方法
- 方法的返回值和访问修饰符是允许有变化的 - 如果父类方法的返回值是 void或 基本数据类型,则要求子类方法重写时返回类型与父类完全一致
- 如果父类方法的返回值是引用类型,则要求子类方法重写时返回类型与父类一致或为父类类型的子类
- 访问修饰符:子类重写方法的访问修饰符访问范围要大于等与父类的访问范围
 
- 如果父类方法的返回值是 
- final修饰的方法不允许被重写
- static修饰的方法- 加了 @Override后不允许被重写,不加则被视为子类的静态方法
 
- 加了 
