java继承 新手问题 多谢指教!

Hanshaw 2016-08-15 11:17:59
刚刚学习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.如何调用父类的父类的方法

我个人觉得这个问题根本不会存在,因为层层继承,应该直接调用就可以了吧,不明白会什么会有这一个问题。

谢谢各位长辈,高手解答!
...全文
227 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
今天晴 2016-08-18
  • 打赏
  • 举报
回复
多看看多思考
  • 打赏
  • 举报
回复
protect修饰的成员和方法 对 同一包中的非继承类相当于是private的
codingjav 2016-08-17
  • 打赏
  • 举报
回复
楼上已经讲解的很清楚了,多看下基础信息
Volcano__Liu 2016-08-16
  • 打赏
  • 举报
回复
你把父类中的Set()改成public试试,你new了一个父类的对象,去调用对象中的函数,和是不是父类没有任何关系。简单来说,就是调用了不在同一包下的protect函数,当然错了。
Intboy 2016-08-15
  • 打赏
  • 举报
回复
父类本来就不能调用子类的啊,因为你拿的本来就是父类的引用,只有子类继承了父类的方法,子类可以调用父类方法。
小灯光环 2016-08-15
  • 打赏
  • 举报
回复
1.不在同一包下的话,protected修饰的方法肯定不能调用,和继承什么的没关系。 2.不会出现这种情况,一般子类根据需求都会重写父类的方法。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧