0
点赞
收藏
分享

微信扫一扫

Java-继承

一,继承的概念

生活中的继承:子女拥有父母的东西

代码中继承:指的是类与类之间产生了关系,多个类有共性内容后向上抽取

父类:超类、基类

父类的范围往往比较大,但是属性和方法一般都比较少

子类:派生类、衍生类

子类的范围往往更精细,属性、方法一般都比较多

所有类都直接或者间接的继承了 Object 类

注:子类的命名一般使用父类的名字作为后缀

二,继承的好处

  1. 子类可以直接访问父类中非私有的成员,提高了代码复用性
  2. 为多态提供了前提


三,子类父类的继承关系

关键字:extends

// 父类
public class Animal{
public int age;
public String name;
public void eat(){}
public void sleep(){}
}
// 子类
public class Human extends Animal{
}


注:

  1. 多个子类可以继承同一个父类
  2. 一个类不能同时继承多个父类
  3. 继承具有传递性


四,子类父类中同名成员的问题

4.1 同名变量

当子父类中出现同名变量时,会根据 “就近原则”,优先获取子类中的成员。

如果要在子类中访问父类中的同名变量,可以使用关键字 super 来调用。

super 表示父类的对象。

4.1 同名方法(重写 override)

重写的概念:在继承关系中,子类对父类的功能进行扩展就是方法的重写。

重写的格式:

  1. 方法的参数列表相同
  2. 方法名相同
  3. 子类重写方法的范围修饰符要大于等于父类的
  1. public > protected > [default] > private
  1. 返回类型是引用数据类型时,子类重写方法的返回类型必须是父类方法返回的类型或者是该类型的子类


注:

  1. 可以使用 @Override 来校验当前的方法定义是否是在重写
  2. 即使子类重写了父类的方法,对父类的方法进行了功能上的扩展,也不能删除父类原有功能
  3. 子类在重写父类功能时,如果要想访问到父类的同名方法,可以使用 super 调用


五,父类属性私有化的问题

问题:当父类属性私有化后,对子类就不可见了,子类无法访问到这些私有属性。

解决:

方式一:父类属性私有化了,但是对外提供的 set/get 方法可以访问,所以子类可以借助父类的 set/get 方法来访问到父类的私有属性

方式二:如果子类想在创建对象时对这些私有化的属性进行初始化,就需要在子类的重载构造函数中调用父类的重载构造函数

class Gun extends Weapon {
// 子弹数量
private int count;

public Gun(String brand, String type, double price, int count) {
super(brand, type, price);
this.count = count;
}
}


六,子父类中构造函数的关系和特点

  1. 每一个类的每一个构造函数中都调用了父类中默认的无参构造函数
  2. 如果重载了构造函数,那么默认的无参构造函数就不存在了
  3. 如果父类中重载了构造函数并且没有写出默认的无参构造函数,那么子类会报错,因为子类中的默认构造函数中无法调用到父类无参构造函数。一般会重载子类的构造函数,并在函数中调用父类的重载构造函数。
  4. 父类构造函数的调用必须在子类构造函数的第一行


七, super 关键字

super 表示父类的对象

super 的作用:

  1. 调用父类的属性、调用父类的方法
  2. 调用父类的构造函数


八,final 关键字

final 可以修饰:

  1. 变量:变成了常量,常量不能重新赋值
    注:final 修饰成员变量时,这个变量必须手动初始化
  2. 对象:对象创建后,不能指向其他的地址
  3. 类:变成最终类,不能被继承
  4. 方法:变成最终方法,不能被重写



举报

相关推荐

0 条评论