【Java】Java中子类可以继承父类所有的属性和方法

某些书本表明“子类只能继承父类的非私有属性和方法”,然而事实并非如此,实际上“Java中子类可以继承父类所有的属性和方法”,只不过因为私有的原因,子类不能调用父类的私有方法。

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
//父类
public class Father {

private String name = "张三";//私有属性
private String sex = "男";

public void tell(){
System.out.println("姓名:"+name);
System.out.println("性别:"+sex);
}

private void speak(){
System.out.println(name+"is speaking!");
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}
}

//子类
public class Child extends Father {

}

//测试类
public class TestJava {

public static void main(String[] args) {

Child c = new Child();
c.tell();// tell方法是可以用的
// c.speak();//报错,父类的私有方法不可见
}

}

可以看到测试类中即使没有给Child类对象的属性进行赋值,tell方法依旧是可用的。如果Child类中没有继承父类的私有属性,那么tell方法应该会报错。由此得出的结论是,子类会继承父类的所有东西,而修饰符只是影响属性或者方法对外是否可见。

Java官方文档的解释:子类不能继承父类的私有属性,但是如果子类中公有的方法影响到了父类私有属性,那么私有属性是能够被子类使用的。