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

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

//父类
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官方文档的解释:子类不能继承父类的私有属性,但是如果子类中公有的方法影响到了父类私有属性,那么私有属性是能够被子类使用的。

你可能感兴趣的:(【Java】Java中子类可以继承父类所有的属性和方法)