1、继承理解
- 继承主要解决的问题:共性抽取
- 继承关系中的特点:
- 子类可以有父类的内容,
- 子类还可以有自己专有的内容
- 继承是一个白盒复用,但他会破坏封装
- 继承要慎用
- java是单继承
- 一个类只能有一个父类
- 可以有0个或多个子类
2、继承的格式
父类就是普通的类
子类格式:
public class Student extends Teacher{
//……
}
3、继承中成员变量的访问特点
public class Fu {
int numfu = 10;
int num = 100;
public void methodNumfu(){
System.out.println(num);
}
}
public class Zi extends Fu {
int numzi = 20;
int num = 200;
public void methodNumzi(){
System.out.println(num);
}
}
public class test {
public static void main(String[] args) {
Zi zi = new Zi(); //创建子类对象
System.out.println(zi.numfu);
System.out.println(zi.numzi);
//当子类中的成员变量与父类中的成员变量一致是,等号左面是谁,就优先使用谁
// 使用了子类中的成员变量
System.out.println(zi.num);
//调用成员方法时:回直接调用当前对象的内容
zi.methodNumzi();
zi.methodNumfu();
}
}
10
20
===============
200
===============
200
100
4、区分三种变量重名问题
- 局部变量 直接写
- 本类中的成员变量 this.成员变量名
- 父类的成员变量 super.成员变量名
public class Fu {
int num = 10;
}
public class Zi extends Fu {
int num = 20;
public void method(){
int num = 30;
System.out.println("局部变量:" + num);
System.out.println("本类中的成员变量:" + this.num);
System.out.println("父类的成员变量:" + super.num);
}
}
局部变量:30
本类中的成员变量:20
父类的成员变量:10
5、继承中方法的重写
概念:在继承关系中,方法的名称一样,参数列表不一样
重写:方法的名称一样,方法的参数也一样,但是方法体最终实现的内容不同,
重载:方法的名称一样,但是方法的参数列表不一样,方法体的内容也可能不同,
注意问题:
- 必须保证父子类方法的名称一致,参数列表也相同,@override,写在方法的前面,用来检测是不是正确覆盖重写,
- 子类方法的返回值必须【小于等于】父类方法的返回值范围
方法重写:主要目的是为了在不改变源代码的情况下,可以对以前写过的代码进行优化,可见下面案例:
package jicheng;
public class Phone {
public void call(){
System.out.println("打电话");
}
public void send(){
System.out.println("发短信");
}
public void show(){
System.out.println("来电显示");
}
}
package jicheng;
public class Newphone extends Phone {
@Override
public void show() {
super.show();
System.out.println("显示头像");
System.out.println("显示姓名");
}
}
package jicheng;
public class Test {
public static void main(String[] args) {
Phone phone = new Phone();
phone.call();
phone.send();
phone.show();
System.out.println("+++++++++++++++");
Newphone newphone = new Newphone();
newphone.call();
newphone.send();
newphone.show();
}
}
运行结果
打电话
发短信
来电显示+++++++++++++++
打电话
发短信
来电显示
显示头像
显示姓名
6、继承中构造方法的访问特点
java中的构造方法:
- 方法名必须与类名相同
- 可以有多个参数,也可以没有参数
- 构造方法,没有返回值,包括没有void
- 默认返回值类型就是对象类型本身,
- 只能与new运算符结合使用
子类构造方法有一个默认的super()调用,所以一定是先父类,在子类,
super的父类调用必须是子类构造方法的第一个语句,不然会报错,还必须仅有一个,
7、super关键字用法
- 在子类的成员方法中,访问父类的成员变量
- 在子类的成员方法中访问父类的成员方法
- 在子类的构造方法中访问父类的构造方法
- super关键字访问父类内容
package jicheng;
public class Phone {
// public Phone(){
// System.out.println("父类的无参构造方法");
// }
int num = 10;
public void methodFu(){
System.out.println("父类的成员方法");
}
public Phone(int num){
System.out.println("父类的有参构造方法");
}
}
package jicheng;
public class Newphone extends Phone {
int num = 20;
//通过子类的构造方法来用super获取父类的构造方法
public Newphone(int num) {
super(num);
}
//通过子类的成员方法来用super获取父类的成员变量num;
public void methodNum(){
System.out.println(super.num);
}
//通过子类的成员方法,来用super获取父类的成员方法
public void methodFun(){
super.methodFu();
}
}
8、this关键字的三种 用法
this关键字访问本类内容,super关键字访问父类的内容
- 在本类的成员方法中访问本类的成员变量
- 在本类的成员方法中,访问本类的另一个成员方法
- 本类的构造方法,访问本类的另一个构造是方法
9、this与super关键字图解
10、java继承的三个特点
- java语言是单继承的,一个类的直接父类只能有一个
- java语言可以多级继承
- 一个类直接父类是唯一的,但是一个父类可以有多个子类