子类使用了父类的私有属性?
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 星