【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(); }
}
|
可以看到测试类中即使没有给Child类对象的属性进行赋值,tell方法依旧是可用的。如果Child类中没有继承父类的私有属性,那么tell方法应该会报错。由此得出的结论是,子类会继承父类的所有东西,而修饰符只是影响属性或者方法对外是否可见。
Java官方文档的解释:子类不能继承父类的私有属性,但是如果子类中公有的方法影响到了父类私有属性,那么私有属性是能够被子类使用的。