子类使用了父类的私有属性?
package com.imooc.work;
public class Work {
// 屬性:工作ming
private String name;
// 無參的構造方法
public void Work() {
}
// 有餐的構造方法
public void Work(String name) {
this.setName(name);
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String work() {
String st="開心工作";
return st;
}
}
package com.imooc.work;
public class TestWork extends Work{
private int testNum;
private int bugNum;
public TestWork() {
}
public TestWork(String name,int testNum,int bugNum) {
this.setName(name);
this.setTestNum(testNum);
this.setBugNum(bugNum);
}
public int getTestNum() {
return testNum;
}
public void setTestNum(int testNum) {
this.testNum = testNum;
}
public int getBugNum() {
return bugNum;
}
public void setBugNum(int bugNum) {
this.bugNum = bugNum;
}
public String work() {
String st=this.getName()+"工作的日報是:今天編寫了"+this.getTestNum()+"測試用例,發現了"
+this.getBugNum()+"bug";
return st;
}
}老师,这段代码里,子类TestWork怎么可以使用父类的私有属性private String name呢?不是说子类只能继承父类的公有成员吗?
0
收起
正在回答
4回答
同学你好,
1、参数列表的定义与属性区域直接定义的方式是不一样的
2、TestWork类没有自己的name属性。
3、这里this.getName() 中的this指的是子类的对象。
public修饰的getName()方法。
整个过程可以这样理解:
Test类通过TestWork tw = new TestWork("测试工作",10,5);创建对象,调用TestWork的有参构造方法,在有参构造方法中,调用父类的setName()方法,为父类的对象的name属性赋值,然后在底层会使用反射的方式赋给子类的对象,最后通过this.getName()方法进行获取的子类的name值。
同学可以不用深究原理,这里JVM在底层会帮我们完成哦~不用太纠结
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
BraveSong灬
2019-08-22 18:21:28
应为set和get这两个方法是public修饰的,子类通过这个方法可以间接的访问父类属性
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程



恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星