Code Bye

java继承 问题 多谢指点

刚刚学习java,有1个关于继承方面的问题,谢谢各位指点指点!
1.子类与父类不在同一个包的情况下,为什么不能通过父类的对象调用父类方法?例子如下:
class Villian {
private int i;
protected void Set(int i){
this.i = i;
}
}
class Orc extends Villian{
public void change (int i){
Set(i);//直接调用父类的protected方法,允许
}
}

假如改写Orc类用下面的对象来访问Set方法,则错误:
class Orc extends Villian{
public void change (int i){
Villian v = new Villian();
v.Set(i);//此句错误
Set(i);//直接访问则可以
}
}
疑问是,protected访问权限是子类,包内,以及同一类内,现在orc的对象v应当属于“子类”这一级别的访问权限,问什么不能调用呢?而且书上专门强调了“不在同一包内的情况下”.
本人猜原因是这里是一个类,在写类方法时还创建了一个对象,虽说写类方法的时候可以用局部变量,但是这里不能用这种相似感觉的“局部对象”,而且会造成这个对象到底是谁来指向,以及内存垃圾的问题,是吗?
2.怎么样调用父类的父类的方法
本人个人觉得这个问题根本不会存在,原因是层层继承,应该直接调用就可以了吧,不清楚会什么会有这一个问题。
谢谢各位长辈,高手解答!

解决方案

5

1.不在同一包下的话,protected修饰的方法肯定不能调用,和继承什么的没关系。
2.不会出现这种情况,一般子类根据需求都会重写父类的方法。

15

你把父类中的Set()改成public试试,你new了一个父类的对象,去调用对象中的函数,和是不是父类没有任何关系。简单来说,就是调用了不在同一包下的protect函数,当然错了。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java继承 问题 多谢指点