提到继承,大家可能第一时间会想到继承遗产,Java里的继承虽然不是继承钱,但是也和继承遗产有相似之处。
继承遗产一般是说子女辈获得了父辈留下的钱财、物品等,java里的继承是指子类获得了和父类一样的属性。
1、类的继承格式
- class 父类 {} // 定义父类
- class 子类 extends 父类{} // 使用extends关键字继承父类
class Person{
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Student extends Person { // 子类继承父类
private String school; // 声明新的属性
public void setSchool(String school){
this.school = school;
}
public String getSchool(){
return school;
}
}
public class FirstJavaDemo {
public static void main(String[] args) {
Student stu = new Student(); // 实例化子类对象
stu.setName("张三");
stu.setAge(18);
stu.setSchool("NKU");
System.out.println("姓名:" + stu.getName() + " 年龄:" + " 学校:" + stu.getSchool());
}
}
2、继承的限制
子类和父类的关系,可以映射到孩子与父亲的关系,正常来说,一个孩子只可能有一个亲生父亲,但是父亲可以有多个孩子,也就是说子类只能继承一个父类,但是父类却可以被多个子类继承
class A {
// 各种代码
}
class B extends A{
// 各种代码
}
class C extends A{
// 各种代码
}
另外虽然不允许多重继承,但是允许多层继承,也就是说孩子可以继承父亲,父亲继承爷爷
class A { // 爷爷
// 各种代码
}
class B extends A{ // 父亲继承爷爷
// 各种代码
}
class C extends B{ // 儿子继承父亲
// 各种代码
}
3、访问限制
使用继承的时候,子类不能直接访问父类的私有成员,但是可以调用父类的非私有方法。
class Person{
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Student extends Person {
public void fun(){
System.out.println("父类的姓名:" + name) // 错误,不能直接访问私有属性
System.out.println("父类的年龄:" + age) // 错误,原因同上
}
}
子类不能直接访问父类的私有成员,但是可以通过getter方法间接来访问,
class Person{
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Student extends Person {
public void fun(){
System.out.println("父类的姓名:" + getName()) // 正确,间接访问
System.out.println("父类的年龄:" + getAge()) // 正确,间接访问
}
}