继承是多态的前提,没有继承就没有多态
概述
格式
在继承关系中,子类就是一个父类,关系:is-a
父类格式(普通类)
1
2
3
4
|
public class 父类名称{
//...
}
|
子类格式
1
2
3
|
public class zilei extends fulei{
//...
}
|
继承中成员变量访问特点
在父子继承关系中,如果有重名变量,则创建子类对象时,有两种方法
- 直接通过子类访问成员变量
等号左边是谁,就优先用谁,没有则向上找。
- 间接通过成员方法
该方法属于谁就优先用谁
直接访问
1
2
3
4
5
6
7
8
9
|
public class Empolyee{
int age = 20;
}
----------------------
public class Teacher extends Employee{
int age = 39;
}
|
1
2
3
4
5
6
7
|
public class Demo{
public class void main(String[] args){
Thacher te = new Teacher();//等号左边是谁用谁
te.age;//39
}
}
|
间接访问
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class Empolyee{
int age = 20;
public void methodFu(){
System.out.println(age);
}
}
----------------------
public class Teacher extends Employee{
int age = 39;
public void methodZi(){
System.out.println(age);
}
}
|
1
2
3
4
5
6
7
8
9
10
|
public class Demo{
public class void main(String[] args){
Thacher te = new Teacher();//等号左边是谁用谁
te.age;//39
te.methodZi();//39
te.methodFu();//20
}
}
|
super, this 关键字
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class Empolyee{
int age = 20;
}
----------------------
public class Teacher extends Employee{
int age = 39;
public void methodZi(){
int age = 10
System.out.println(age);//10
System.out.println(this.age);//39
System.out.println(super.age);//20
}
}
|
super 的3种用法
- 在子类成员方法中,访问父类成员变量
- 在子类成员方法中,访问父类成员方法
- 在子类构造方法中,访问父类构造方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class Empolyee{
int age = 20;
public void method(){
System.out.println("Fu");
}
}
----------------------
public class Teacher extends Employee{
int age = 39;
public Teacher(){
super();
}
public void method(){
super.age;
super.method;
}
}
|
This 3种用法
- 在本类成员方法中,访问本类成员变量
- 在本类成员方法中,访问本类另一个成员变量
- 在本类的构造方法中,访问本类的另一个构造方法
A. 第三种this(…)必须写在方法的第一行,唯一一个语句
B. super() this()两种构造调用不能同时使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
public class Empolyee{
int age = 20;
}
----------------------
public class Teacher extends Employee{
int age = 39;
public Zi(){
this(123)//本类无参数构造调用有参
}
public Zi(int a){
}
public void methodZi(){
int age = 10
System.out.println(age);//10
System.out.println(this.age);//39
System.out.println(super.age);//20
}
public void methodA(){
this.methodZi();
}
}
|
继承的三个特点