在 Java 面向对象-内部私有属性 中,我们定义了Person类:
package my.ioc;
public class PrivateField {
public static void main(String[] args) {
Person ming = new Person();
ming.setName("Xiao Ming"); // 设置name
ming.setAge(12); // 设置age
System.out.println(ming.getName() + ", " + ming.getAge());
}
}
class Person {
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
现在,假设需要定义一个Student类,字段如下:
class Student {
private String name;
private int age;
private int score;
public String getName() {...}
public void setName(String name) {...}
public int getAge() {...}
public void setAge(int age) {...}
public int getScore() { … }
public void setScore(int score) { … }
}
仔细观察,发现Student类包含了Person类已有的字段和方法,只是多出了一个score字段和相应的getScore()、setScore()方法。
能不能在Student中不要写重复的代码?
这个时候,继承就派上用场了。
继承是面向对象编程中非常强大的一种机制,它首先可以复用代码。当我们让Student从Person继承时,Student就获得了Person的所有功能,我们只需要为Student编写新增的功能。
Java使用extends关键字来实现继承:、
class Person {
private String name;
private int age;
public String getName() {...}
public void setName(String name) {...}
public int getAge() {...}
public void setAge(int age) {...}
}
class Student extends Person {
// 不要重复name和age字段/方法,
// 只需要定义新增score字段/方法:
private int score;
public int getScore() { … }
public void setScore(int score) { … }
}
可见,通过继承,Student只需要编写额外的功能,不再需要重复代码。
Java只允许一个class继承自一个类,因此,一个类有且仅有一个父类。只有
Object特殊,它没有父类继承有个特点,就是子类无法访问父类的
private字段或者private方法。例如,Student类就无法访问Person类的name和age字段
2518

被折叠的 条评论
为什么被折叠?



