目录
一.继承
1.继承的原理:
2.继承的细节:
3.继承的本质:
二.super的使用:
1.基本介绍:
2.注意事项与使用细节:(1)访问父类的属性super.属性名,但不能访问父类的private属性
3.super和this的比较:
三.方法的重写(覆盖):
1.基本介绍:
2.使用细节:
一.继承
1.继承的原理:
当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过extends来继承父类即可。
继承的基本语法:
class 子类 extends 父类{
(1)子类会自动拥有父类定义的属性和方法
(2)父类又叫超类、基类。
(3)子类又叫派生类。
}
2.继承的细节:
(1)子类继承了所有的属性和方法,但是私有属性和方法不能在子类直接访问,要通过父类提供的公共的方法去访问。
(2)子类必须调用父类的构造器,完成父类的初始化。当创建子类对象的时候,不管使用子类的·哪个构造器,如果父类没有提供无参构造器,则必须在子类的构造器中使用super去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过。
(3)如果希望调用父类的某个构造器,则显式的调用一下:super()
(4)super()必须放在子类构造器的最前面,super()只能在构造器中使用
(5)super()和this()都要放在构造器的第一行,因此这两个方法不能共存于一个构造器。
(6)所有的类都是Object的子类,父类构造器的调用不限于直接父类,将一直向上追溯到Object类(顶级父类)。
(7)子类在Java中最多只能继承一个父类(直接继承),不能滥用继承。
3.继承的本质:
当子类继承父类时,按照查找关系来返回信息,首先查看子类是否有该属性,如果子类有这个属性且可以访问,则返回信息。如果子类没有这个属性,就看父类有没有这个属性(如果子类有这个属性且可以访问,则返回信息)。
public class Extendstheory{
public static void main(String[] args){
Son son = new Son();
//按照查找关系来返回信息,首先查看子类是否有该属性,如果子类有这个属性且可以访问,则返回信息。如果子类没有这个属性,就看父类有没有这个属性(如果子类有这个属性且可以访问,则返回信息)。
System.out.println(son.name);//大头儿子
System.out.println(son.age);//39
System.out.println(son.hobby);//旅游
System.out.println(son.getAge());//2024
}
}
class Grandpa {
String name = "大头爷爷";
String hobby = "旅游";
}
class Father extends Grandpa {
String name = "大头爸爸";
int age = 39;
privare int years = 2024;
public int getAge() {
return age;
}
}
class person extends Father{
String name = "大头儿子";
}
二.super的使用:
1.基本介绍:
super代表父类的引用,用于访问父类的属性、方法、构造器。
2.注意事项与使用细节:
(1)访问父类的属性super.属性名,但不能访问父类的private属性
(2)访问父类的方法super.方法名(参数列表),不能访问父类中的private方法
(3)访问父类方法的构造器super(参数列表),只能放在构造器的第一句,只能出现一句
(4)super类的访问不限于直接父类,如果多个基类中都有同名的成员,使用super访问遵循就近原则。
3.super和this的比较:
三.方法的重写(覆盖):
1.基本介绍:
方法覆盖就是子类有一个方法和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的方法。
2.使用细节:
(1)子类和父类的方法名、参数必须一致
(2)子类方法的返回类型要和父类的返回类型一致,或者是父类返回类型的子类,比如父类返回类型是Object,子类返回类型是String。
(3)子类方法不能缩小父类方法的访问权限 public>protected>默认>private