1、为什么要继承
继承从字面意思还是比较好理解的,与我们生活密切相关,像子女继承了父母的财产。
而在我们Java当中,使用类来描述一些事物,在复杂的世界中,事物之间可能会存在一些关联,比如猫、狗、鸡,猫是动物,狗是动物,鸡也是动物,他们身上具有一些共同的特征,在Java中使用类来描述猫、狗、鸡,在描述的时候会发现他们都有的共同特性,若在每个类中都需要描述一遍,使得开发变的很慢,而我们写一个动物类,让其猫、狗、鸡类去继承动物类,就解决了这个问题。
继承是从已经存在的类派生出新的类(派生类),并且新的类拥有被继承类(父类)的属性和方法,并能扩展新的功能,使得大大提高了代码的复用性,提高开发效率。
2、继承的概念
继承是Java面向对象编程的重要思想,在设计继承时,往往会把共同的程序代码放在某一个类中。假如一个类A继承类B,通常把A称为子类,而B称为父类。父类右称为超类或基类,子类又称为派生类,Java不支持多继承,一个类只能有一个父类。
继承的分类:
3、继承的规则
3.1定义
java当中表示类之间的继承关系,使用extends关键字
class B extends A{
//...
}
注意事项:
- 子类会将父类中的成员变量或者成员方法继承到子类中
- 子类需要体现和父类的不同点,否则继承就没有什么意义
3.2子类访问父类的成员
- 如果访问的成员子类有,优先访问自己的成员
- 如果访问的成员子类没有,则访问从父类继承下来的,如果父类没有,则编译报错
- 如果访问的成员与父类的成员同名,则优先访问自己的
public class Test {
public static void main(String[] args) {
B b = new B();
System.out.println(b.a);
System.out.println(b.b);
System.out.println(b.c);
b.print();
b.speak();
b.get();
}
}
4、super和this
super是一个关键字,代表从子类对象从父类继承下来的部分成员的引用。
主要作用:
- 在子类中访问父类的成员
- 子类中调用父类的构造方法
- super(…)调用父类的构造方法
- super.成员方法引用父类的成员方法
- super.成员变量引用父类的成员变量
super和this的区别: - this表示当前对象的引用,super表示父类继承下来部分成员的引用
- this是非静态成员方法的一个隐藏参数(),super不是隐藏参数。
- 在子类的构造方法中,一定有一个super(…)引用,用户没写编译器会自动增加,
super和this的共同点: - 只能在类的非静态方法中使用
- 在构造方法中使用时,必须写在方法中的第一条语句。
注意事项:在子类构造方法中this()和super()不能同时出现
5、子类的构造方法
从我们正常思考习惯来看,父子关系,先有父再有子,所以当我们在创建子类对象时,需要先调用父类的构造方法,然后在执行子类的构造方法。
说明:
子类对象中成员是有两部分组成的,基类继承下来的以及子类新增加的部分 。所以在构造子类对象时候 ,先要调用基类的构造方法,将从基类继承下来的成员构造完整,然后再调用子类自己的构造方法,将子类自己新增加的成员初始化。
注意:
- 若父类中没有无参的构造方法,则子类的构造方法中,必须主动为父类构造。
- 在子类构造中,super(…)调用父类构造时,必须是子类构造函数的第一条语句
6、重写
概念:重写是子类对父类允许访问的非构造方法的实现过程进行重新编写。
规则:
- 子类重写父类的方法,子类的方法和父类被重写方法具有相同的方法名称,参数列表。
- 若重写的方法的返回值是基本类型,则返回值必须和父类相同,若返回值是引用类型,子类重写方法的返回值,可以是父类被重写方法返回值或者其子类。
- 子类重写的方法使用的访问权限要大于等于父类被重写的方法的访问权限
- 子类不能重写父类中private申明的方法
- 子类方法抛出的异常不能大于父类被重写方法的异常
重写和重载的区别:
区别 | 重载 | 重写 | |
---|---|---|---|
返回类型 | 可以不同 | 一定相同 | |
参数列表 | 必须不同 | 一定相同 | |
访问限定符 | 可以不同 | 可以不同 |