1.什么是继承?
继承发生的前提:当多个类中有相同的属性和行为时,把这些相同的属性和行为抽取出来封装到一个独立的类中
在Java中使用继承(extends),来继承这些封装了公共属性和行为的类(父类)
继承:有父类,有子类
结论:让一个类(子类、派生类)继承另一个类(父类、超类、基类)
2.继承解决程序中的什么问题
1.程序中代码的复用性(重复的代码抽取出来,封装到父类中,子类继承后就可以直接使用了)
2.提升代码的维护性
2.建立类与类之间的关系,是多态的前提
3.继承怎么使用
public class 父类{
//相同的属性和行为
}
public class 子类 extends 父类{
//子类可以使用父类中定义的内容
}
4.继承在使用中有什么注意细节(特点)
1.Java只能单一继承(不能多继承),允许多层继承
2.在子类继承父类后,就可以直接访问父类中的非私有成员(成员变量、成员方法)
3.在继承中,访问成员变量或成员方法的原则:就近原则(先在子类中查找,子类没有再去父类中查找)
super.父类中的成员变量
super.父类中的成员方法
4.当父子类中存在一模一样的成员方法时,这样情况称为:方法重写
5.在继承中,要先初始化父类对象(通过子类构造方法中的super()来调用父类中的无参构造)
//调用父类有参构造方法:super(参数......)
5.继承中方法的重写
1.什么是方法重写
子类和父类出现了一模一样的方法(方法名,参数列表)
2. 方法重写解决什么问题?
当子类需要父类的功能,但父类的该功能不完全满足自己的需求时,子类可以重写父类中的方法,这样,既沿袭了父类的功能,又定义了子类特有的内容
3. 方法重写怎么实现
子类和父类中的方法一模一样,重新实现
4. 方法重写有什么注意细节
·重写方法的名称和形参列表必须与被重写的方法名称和参数列表一致
·私有方法不能被重写
·子类重写父类方法时,子类方法访问权限必须大于或者等于父类方法权限(public>protected>默认的>private)
5.@Override注解是做什么的,有什么作用?
@Override是放在重写后的方法上,作为重写是否正确的校验注解,加上该注解后如果重写错误,程序编译会报错
6.继承中构造方法的使用
1.子类中所有的构造方法默认都会访问父类中的无参构造(原因:子类在初始化的时候,有可能使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据(子类初始化之前,一定要先完成父类的初始化)(初始化:构造方法的第一条语句默认都是:super();,被隐藏)
2.注意:this(…) super(…) 必须放在构造方法的第一行有效语句,并且二者不能共存。
3.每一个子类构造方法的第一条语句默认都是:super()
1.如果父类中没有空参构造方法,只有带参构造方法,会出现什么现象呢?
——子类通过 super,手动调用父类的带参的构造方法, 推荐
——子类通过 this 去调用本类的其他构造方法,本类其他构造方法再通过 super 去手动调用父类的带参的构造方法 , 不推荐
public class Father {
//构造方法
//无参构造
public Father() {
System.out.println("父类无参构造方法");
}
//有参构造
public Father(String name) {
System.out.println("父类有参构造方法"+name);
}
}
----------------------------------------------------------------
public class Son extends Father{
public Son() {
//有隐藏代码super();
//this("周三");//调用本类有参构造Son(String name)方法
System.out.println("son类无参构造方法");
}
public Son(String name) {
// 隐藏代码:super();
// 调用父类有参构造
super(name);//调用父类有参构造
System.out.println("son类有参构造方法");
}
}
public class Text05 {
public static void main(String[] args) {
Son son1 = new Son();
}
}
---------------------------------------------------------------
代码运行结果:
父类无参构造方法
son类无参构造方法
7.继承中构造方法内存图解
8.super和this关键字使用
this和super同属于对象,区别在于:
this :代表本类对象的引用;
super:代表父类存储空间(可以看做成父类对象)
8.super和this关键字使用
this和super同属于对象,区别在于:
this :代表本类对象的引用;
super:代表父类存储空间(可以看做成父类对象)
关键字 |
访问成员变量 |
访问成员方法 |
访问构造方法 |
this |
this.成员变量 访问本类成员变量 |
this.成员方法(…) 访问本类成员方法 |
this(…) 访问本类构器 |
super |
super.成员变量 访问父类成员变量 |
super.成员方法(…) 访问父类成员方法 |
super(…) 访问父类构造器 |