# 继承
继承是面向对象三大特征之一,封装之后形成了独立体,独立体A和独立体B之间可能存在继承关系。其实程序中的继承灵感来自于现实生活,在现实生活中继承处处可见,例如,儿子继承了父亲的财产,儿子不需要努力就很有钱。
继承时子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性,或子类从父类继承方法,使得子类具有与父类相同的行为。兔子和羊属于食草动物类,狮子和豹属于食肉动物类。食草动物和食肉动物又是属于动物类。所以继承需要符合的关系是:is-a(Bird is-a Animal),父类更通用,子类更具体。虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。
为什么要使用继承机制?在不同的类中也可能会有共同的特征和动作,可以把这些共同的特征和动作放在一个类中,让其它类共享。因此可以定义一个通用类,然后将其扩展为其它多个特定类,这些特定类继承通用类中的特征和动作。继承是 Java 中实现软件重用的重要手段,避免重复,易于维护。
语法:
class 类名 extends 父类名{
// 类体
}
1
2
3
2
3
备注:
使用 extends 继承父类
// Address.java
public class Address {
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
// Person
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
// Student.java 继承 Person 类
public class Student extends Person{
private double score;
private Address address;
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
// StudentTest.java
public class StudentTest {
public static void main(String[] args) {
Student s = new Student();
s.setName("'张三'");
s.setAge(28);
s.setScore(100.00);
System.out.println("name: " + s.getName()); // 张三
System.out.println("age: " + s.getAge()); // 28
System.out.println("score: " + s.getScore()); // 100.0
/**
* Student类中成员变量 address 是Address类型是引用类型
* s.getAddress().getAddress() 第一个get是获取第一层数据,是Address引用类型,所以第二层get获取是address数据
*/
Address address = new Address();
address.setAddress("彦霖路");
s.setAddress(address);
System.out.println(s.getAddress().getAddress()); // 彦霖路
}
}
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
备注:
- B类继承A类,则称A类为超类(superclass)、父类、基类,B类则称为子类(subclass)、派生类、扩展类。
- java中的继承只支持单继承,不支持多继承。
- java中不支持多继承,但可以间接继承,例如:class C extends B,class B extends A,也就是说,C直接继承B,其实C还间接继承A。
- ava中规定,子类继承父类,除构造方法和被private修饰的数据不能继承外,剩下都可以继承。
- java中的类没有显示的继承任何类,则默认继承Object类,Object类是java语言提供的根类(老祖宗类),也就是说,一个对象与生俱来就有Object类型中所有的特征。
- 继承缺点,例如:B类继承A类会导致它们之间的耦合度非常高,A类发生改变之后会马上影响到B类。
- 继承优点,继承解决了代码复用的问题
← static和this 覆盖 →