如何访问覆盖的父类方法?

lydavid 2003-07-23 02:56:37
public class a {
public void m_1(){
//实现
}
}
public class b extends a{
public void m_1(){
//实现
}
public void m_2(){
//实现
}
}
public class c{
public static void main(String[] args){
b haha=new b();
haha.m_1();
//有没有方法可以不再声明一个a 对象引用
//实现用haha调用类a的m_1方法(也就是父类的方法m_1)
}
}

晚上看书,忽然想到,求教各位,

----------------------
//我是菜鸟,请多关照!!
...全文
65 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
duoshanx 2003-09-10
  • 打赏
  • 举报
回复
虽然结帐了,但还是自己想在贵帖上整理一下自己。

a haha=new b();
就可以调用了。
使用的是java中的隐藏。
ChDw 2003-07-23
  • 打赏
  • 举报
回复
((a) haha).m_1();是不可以的!仍然会执行的是B的方法,因为无论你怎么类型转换,实际上
haha仍然是B,所以是不行的
lydavid 2003-07-23
  • 打赏
  • 举报
回复
在补充一句:我是2002毕业的!!
lydavid 2003-07-23
  • 打赏
  • 举报
回复
我认错!!中午太武断了,真是要不得,晚上运行,确实如各位所说!!
再次感谢大家!!大家都这么热心!!

一个问题让我又明白了很多东西,总结如下:
1 题目问题解决了
2 想通了继承的关系 object--->class a \class c ----> class b
3 super地用法(一部分)
4 额外的明白了static 用法,Jackle2001cn(jackle)的例子中不能用super.baseMethod()
因为baseMethod不是 static 方法

说得对不对,还请大家指正
----------------------------------
另外,真心跟大家交个朋友。
如果你是高手,我可能会经常麻烦你,
如果跟我一样,我们互相切磋,鼓励!
我的简单介绍:
男(泡mm的就算了,呵呵)
广州,程序员
PB+SQL server
QQ:43575055
-------------------------------------------------


alienbat 2003-07-23
  • 打赏
  • 举报
回复
用super关键字
super.haha.m_l()
amortal 2003-07-23
  • 打赏
  • 举报
回复
有道理,可行((a) haha).m_1();
SIVCORE 2003-07-23
  • 打赏
  • 举报
回复
强制转化成父类就行了
leejidongdong 2003-07-23
  • 打赏
  • 举报
回复
((a) haha).m_1();
umeshu 2003-07-23
  • 打赏
  • 举报
回复
试试
((a) haha).m_1();
lydavid 2003-07-23
  • 打赏
  • 举报
回复
这样不行吧,因为class c 没有继承,a 或者 b 呀
----------------------
//我是菜鸟,请多关照!!


shine333 2003-07-23
  • 打赏
  • 举报
回复
super.x();
ZWP425 2003-07-23
  • 打赏
  • 举报
回复
((A)b).baseMethod()执行的只能是B类重写A类的方法,要想用A类的方法只能在B类中使用super.baseMethod()。
amortal 2003-07-23
  • 打赏
  • 举报
回复
如果不行那就只有在B里面写个另外的函数,那里面调用super.fuc()

到底行不行,一个说可以了,另一个说不行,呵呵
自己又懒得去试!
Jackle2001cn 2003-07-23
  • 打赏
  • 举报
回复
强制转换是不行的。java的运行机制是RTTI的。有程序为证!
class A{
void baseMethod(){
System.out.println("A:baseMethod is called");
}

}

class B extends A{
void baseMethod(){
System.out.println("B:baseMethod is called");
}
}

public class C{
public void test(){
B b = new B();
b.baseMethod();
((A)b).baseMethod();//强制转化
}
public static void main(String[] args){
C c = new C();
c.test();
}
}

//---------console output--------------------

B:baseMethod is called
B:baseMethod is called

至于如何调用父类的方法,我也不知道。
ChDw 2003-07-23
  • 打赏
  • 举报
回复
强制类型转换在编译来说当然成功,但是实际上你的调用仍然不正确
((a) haha).m_1();其实和haha.m_1()执行的效果是一样的,都是调用类b的方法m_1
并没有随着你的强制类型转换而改变

这种是java的处理机制,如果不是这样的话就出现很多混乱的情况了
ChDw 2003-07-23
  • 打赏
  • 举报
回复
强制类型转换在编译来说当然成功,但是实际上你的调用仍然不正确
((a) haha).m_1();其实和haha.m_1()执行的效果是一样的,都是调用类b的方法m_1
并没有随着你的强制类型转换而改变

这种是java的处理机制,如果不是这样的话就出现很多混乱的情况了
lydavid 2003-07-23
  • 打赏
  • 举报
回复
谢谢各位,先
中午回来试了一下,用强制转换是可以的

上面有人,用super关键字,我开始也是打算这样的,
可是,class c 并没有继承自任何其他的类
所以super就不能指向 class b 而是指向 object
所以不能用super关键字,我说得对吗?

----------------------
//我是菜鸟,请多关照!!

62,614

社区成员

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

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