一道用Java访问控制权限解答的题,求大神指点

第一个类:packagepak1;publicclassJ{publicvoidmethod1(){System.out.println("InJ");}publicvo... 第一个类:package pak1;

public class J {
public void method1() {
System.out.println("In J");
}

public void call() {
method1();
}
}
第二个类:
package pak2;

import pak1.J;

public class M extends J {

public void method1() {
System.out.println("In M");
}

public static void main(String[] args) {
new M().call();
}
}

问第二个类运行后为什么输出“In J”?
展开
 我来答
杜静佛0B
2015-06-07 · 超过15用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:28.6万
展开全部
你调用的M中的call()方法,但M中不存在该方法,所以就去父类中查找,找到父类中的call()方法,而父类中的call()方法调用的是父类J中的method1()方法,所以输出In J,明白了不?
追问
你好。但是M是继承了J的,那怎么能说M中不存在call方法呢?
追答
子类在继承父类时所继承的属性和方法(非私有的)是和父类共用的,父类对象里的属性和方法必须通过子类对象才能访问到,因为它是包含在子类对象内部的。调用子类对象中的属性和方法的时候,会先从子类对象里面找,找不到的话才去那个父类对象中找,所以如果发生了重写/覆盖,就会调用子类对象里重写的方法而不是父类对象里的。如果要在子类中调用父类中被重写/覆盖的属性和方法,必须在前面加上关键词super. 不知道你能不能理解...
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式