子类使用了父类的私有属性?
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | 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积分~
来为老师/同学的回答评分吧