100分问一个继承类访问(方法/变量)的简单问题,大虾门来帮忙``回答的就有分

zhouysh 2004-09-07 10:31:43
//父类
package packageX;

public class SuperclassX
{
protected void superclassMethodX()
{
}
protected int superclassVarX;
}

//子类
1. package packageY;
2. import packageX.*;
3. public class SubclassY extends SuperclassX
4. {
5. SuperclassX objX = new SubclassY();
6. SubclassY objY = new SubclassY();
7. void subclassMethodY()
8. {
9. objY.superclassMethodX();
10. int i;
11. i = objX.superclassVarX;
12. }
13. }


请问: 一, SuperclassX 和 SubclassY 虽然是父/子类关系,但他们不在一个包下,子类也能调用父类的protect方法???是不是只要是继承了 不管是否同一个包 子类也能调用父类的protect方法?
二, 上面的子类中 第 11 行会出现编译错误, 这一点不太明白, objX调用自己的protect方法还会用什么问题? 第 5 行 SubclassY objY = new SubclassY(); 调用父类的构造方法后然后在转型成父类 ,这样做 objX 应该是父类吧??一般这样用有什么好处??

我是菜鸟,请大家别笑我!!!!回答就有分 !!在线等!!!
...全文
198 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyxu1982 2004-09-07
  • 打赏
  • 举报
回复
sorry,说错了。
fireflyqt(孤独萤火虫)说的是对的:
类A继承类B,这两个类在不同的包中,那么在类A中自然继承了类B的protected方法,但是使用时,你声明的是类B的对象,既然不在同一包中,你有什么权力使用类B的protected方法,而你又声明了一个类A的对象,该对象与类A在同一包中,当然有权力使用类A的protected方法。
pillar110 2004-09-07
  • 打赏
  • 举报
回复
用'引用'这个词更好一点,就像C里的指针概念一样
父类里被声明为protected的实例方法,子类是可以访问到的
whbxm2000 2004-09-07
  • 打赏
  • 举报
回复
objX是一个SuperclassX的句柄 这话不懂, 怎么讲的??
指的是,objX是SuperclassX声明的变量,但是它指向SubclassY。
fireflyqt 2004-09-07
  • 打赏
  • 举报
回复
是这样的:类A继承类B,这两个类在不同的包中,那么在类B中自然继承了类A的protected方法,但是使用时,你声明的是类B的对象,既然不在同一包中,你有什么权力使用类B的protected方法,而你又声明了一个类A的对象,该对象与类A在同一包中,当然有权力使用类A的protected方法。

不知道说明白没?
Eddie 2004-09-07
  • 打赏
  • 举报
回复

protected 对继承者是开放的,不管在不在一个包里。
如果同一个包下,protected=firendly.
zhouysh 2004-09-07
  • 打赏
  • 举报
回复
to 回复人: xyxu1982(云娜)
不是吧 , A如果是B的子类 不在同一个包里的话 如果有继承关系的话 ,是可以访问protect的啊??
xyxu1982 2004-09-07
  • 打赏
  • 举报
回复
不管A和B是什么关系
zhouysh 2004-09-07
  • 打赏
  • 举报
回复
to : xyxu1982(云娜)

但类A 是 B类的子类啊.....
例如: objX 到底是一个什么身份啊????( SuperclassX objX = new SubclassY(); )
xyxu1982 2004-09-07
  • 打赏
  • 举报
回复
在类A实例化了另一个包里的类B,并且调用了这个类B里的非public成员会编译错
zhouysh 2004-09-07
  • 打赏
  • 举报
回复
to :mor(安稼)

而在
11. i = objX.superclassVarX;
这里objX是一个SuperclassX的句柄,所以调用protected时,就不行了,这是调用另一个包里的protected了

==============================================

objX是一个SuperclassX的句柄 这话不懂, 怎么讲的??
hpy121 2004-09-07
  • 打赏
  • 举报
回复
如下改后应该没有问题!
protect方法只能在同一个包内调用!

//父类
package packageX;

public class SuperclassX
{
protected void superclassMethodX()
{
}
protected int superclassVarX;
}

//子类
1. package packageX;
2. // import packageX.*;
3. public class SubclassY extends SuperclassX
4. {
5. SuperclassX objX = new SubclassY();
6. SubclassY objY = new SubclassY();
7. void subclassMethodY()
8. {
9. objY.superclassMethodX();
10. int i;
11. i = objX.superclassVarX;
12. }
13. }

healer_kx 2004-09-07
  • 打赏
  • 举报
回复
哦, 我明白了。
healer_kx 2004-09-07
  • 打赏
  • 举报
回复
问题一是没有问题的。

第11行不该有错吧?
是不是你的i的问题啊?
mor 2004-09-07
  • 打赏
  • 举报
回复
haha,我是看到你另一个问题,然后去看TIJ的,没想到你又开了个帖子。

其实这里的噱头就在于变量的声明:
5. SuperclassX objX = new SubclassY();
6. SubclassY objY = new SubclassY();

于是在
9. objY.superclassMethodX();
这里是调用一个SubclassY对象继承来的protected方法,由于即使不是在一个包里,只要有继承关系,子类就可以调用父类的protected方法,所以这里就没有问题

而在
11. i = objX.superclassVarX;
这里objX是一个SuperclassX的句柄,所以调用protected时,就不行了,这是调用另一个包里的protected了。

如果把声明改成
5. SubclassY objX = new SubclassY();
6. SuperclassX objY = new SubclassY();
那么报错就应该在第9行而不是第11行了。

关于protected的访问范围,看上面hpy121(孩子)
hpy121 2004-09-07
  • 打赏
  • 举报
回复
子类能调用父类的protect方法
protect类是受到保护的,并且protect类的子女因为继承受到保护的的关系也是受到保护的,所以protected的意义在于允许派生类访问基类的成员,而基类的包中的其他类也是可以访问的
lliushine 2004-09-07
  • 打赏
  • 举报
回复
子类继承了父类的protected变量,
可以用子类的实例来访问继承的变量,
也可用父类的实例来访问父类的同一变量
zhouysh 2004-09-07
  • 打赏
  • 举报
回复
楼上的不厚道 我不会给分你的.....
baffling 2004-09-07
  • 打赏
  • 举报
回复
gz
fucr_364204 2004-09-07
  • 打赏
  • 举报
回复
1.楼主理解没有错,对于不同包中对于非子类的可见的只有PUBLIC成员,对于不同包中对于子类可见有protected成员和PUBLIC成员,同一个包中无论是否是子类都只有PRIVATE不可见,其他3类成员都可见.
2. 关于第二问,zhengcg(楚楚) 解释得好,我就不班门弄负了.
zhouysh 2004-09-07
  • 打赏
  • 举报
回复
楼上一个讲的比一个精彩 还有人说吗
分我是一定会给的啦
加载更多回复(4)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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