我们熟悉的一个概念是,“子类不能继承父类私有的属性或方法”,但其实是可以继承的,只是因为修饰符的原因,我们不能直接调用。
代码解释:
父类/超类/基类 Persons :
package OOP.atguigu.extend;
public class Persons {
private int age; // 私有的属性
public String name; // 共有的属性
// 定义一个共有的方法
public void eat() {
System.out.println("吃饭");
sleep(); // 在eat方法里面调用sleep方法
}
// 定义一个私有的方法
private void sleep() {
System.out.println("睡觉");
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
}
子类/派生类 Students:
package OOP.atguigu.extend;
// 让Student继承Persons类
public class Student extends Persons {
public String grade; // 定义一个共有的属性,学生的年级
// 打印学生的年级信息
public void showGrade() {
System.out.println("学生的年级为:" + this.grade);
}
}
测试类:
package OOP.atguigu.extend;
public class StudentTest {
public static void main(String[] args) {
// 实例化一个Student对象
Student s = new Student();
s.grade = "一年级"; // student自己所具有的属性
s.setAge(10); // 通过set方法设置继承来的私有属性
s.name = "tom"; // 直接对继承来的共有属性进行赋值
s.eat();
// s.sleep(); sleep() 是私有方法,不能被调用,否则会报错
System.out.println("学生年龄为:" + s.getAge()); // s调用getAge()方法来获得age属性
}
}
结果截图:
总结:
通过运行结果看出,eat方法输出了自己的语句,同时又调用了sleep方法,eat方法是被继承的,但是sleep方法的执行也说明了sleep方法也被继承了。只是由于修饰权限导致不能直接调用。set和get 方法也是被继承的,通过他们对age属性进行了赋值,说明age 属性也被继承了。