当前位置: 代码迷 >> Java相关 >> 一个关于继承问题
  详细解决方案

一个关于继承问题

热度:72   发布时间:2007-04-03 09:14:35.0
一个关于继承问题
请教各位一个问题:
public class ClassA{
public void f1(){...}
}
public class ClassB extends ClassA{
public void f1(){...}//改写基类f1
}
public class MainClass{
main(){
ClassA a1=new ClassB();
a1.f1();//之后怎么调用基类的方法f1()呢?
}
}
搜索更多相关的解决方案: 继承  

----------------解决方案--------------------------------------------------------
这就是动态绑定啊

当调用一个对象的方法的时候,它调用的是实际这个对象的方法

你想调用基类的方法f1,有两种方法

1,直接ClassA a1=new ClassA();

2,在ClassB重写f1的时候,先调用一下super.f1();这样你每次调用子类的f1的时候,它也调用了父类的f1;


----------------解决方案--------------------------------------------------------

调不成了,你只在你的子类的f1方法中用super.f1()去调用基类的方法。


----------------解决方案--------------------------------------------------------
那super(a).f1()可以吗?!
----------------解决方案--------------------------------------------------------
JAVA里面不能这样做,你再强制转换,a指向的对象,依然是子类
----------------解决方案--------------------------------------------------------
那如果非得怎么用
有什么办法呢?!
----------------解决方案--------------------------------------------------------
就是说B类是不能改动的
而且声明对象的时候也不允许改动
只是调用改动呢!?
----------------解决方案--------------------------------------------------------

如果非得这么用,那你就生成一个父类的对象吧,或者你把这个方法声明为static的,这个子类就重写不了了

比如

[CODE]class A{
public static void doSth(){
System.out.println("A.doSth");
}
}
class B extends A{
public static void doSth(){
System.out.println("B.doSth");
}
}
public class Test{
public static void main(String[] args){
A a=new B();
a.doSth();
((B)a).doSth();
}
}[/CODE]


----------------解决方案--------------------------------------------------------
重写不了方法的话
那么B类不就失去意义了吗?!
----------------解决方案--------------------------------------------------------
((B)a).doSth();
是什么意思?!
不太明白
请教斑竹
----------------解决方案--------------------------------------------------------
  相关解决方案