一道用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”? 展开
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”? 展开
1个回答
展开全部
你调用的M中的call()方法,但M中不存在该方法,所以就去父类中查找,找到父类中的call()方法,而父类中的call()方法调用的是父类J中的method1()方法,所以输出In J,明白了不?
追问
你好。但是M是继承了J的,那怎么能说M中不存在call方法呢?
追答
子类在继承父类时所继承的属性和方法(非私有的)是和父类共用的,父类对象里的属性和方法必须通过子类对象才能访问到,因为它是包含在子类对象内部的。调用子类对象中的属性和方法的时候,会先从子类对象里面找,找不到的话才去那个父类对象中找,所以如果发生了重写/覆盖,就会调用子类对象里重写的方法而不是父类对象里的。如果要在子类中调用父类中被重写/覆盖的属性和方法,必须在前面加上关键词super. 不知道你能不能理解...
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询