各位大哥,我写了两个类如下:
public class A {
public void go(){
System.out.println("go test!");
}
}
/////////////////////////////////////////////////////////////////////
public class B extends A{
public void back(){
System.out.println("back test!");
}
public static void main(String args[]){
A s=new B();
//为什么对象s只能调用类A的方法go(),而不能调用类B的方法back()
s.go();
}
}
这样创建的对象s听说是属于类B的,但是s只能调用类A的方法go(),而不能调用类B的方法back()呢?怎么样才能让s调用到类B的方法呢?这个问题我知道很弱,但我还是不知耻的问一问大家,请各位赐教啊!

解决方案 »

  1.   

    ((B)s).back();
    这样写又是什么意思呢?
      

  2.   

    首先,永远不要说自己弱智,
    其次,你的问题不简单
    最后,请看我的答案:s是一个指向A类的Reference, 因为A中没有定义back()方法,所以s不能访问B.back();
    若再A类中定义一个back()方法就可以访问B.back()方法了,如下所示:
    class A {
    public void go(){
    System.out.println("go test!");
    }
    public void back() {
    System.out.println("This is A back");
    }
    }
    确切讲不能叫访问B.back(),而应称为运行B.back(),为什么呢?这涉及到运行期对象识别问题。
    在编译期间,s是一个指向A的Reference,但在运行时,s实际指向的是B类,所以当运行s.back()时就调用B.back(),不知我讲明白没有?
      

  3.   

    另外,一个文件中不能有两个public class,除非将A与B放在不同的文件中。完整代码如下:
    class A {
    public void go(){
    System.out.println("go test!");
    }
    public void back() {
    System.out.println("This is A back");
    }
    }public class B extends A{
    public void back(){
    System.out.println("back test!");
    }
    public static void main(String args[]){
    A s=new B();
    //为什么对象s只能调用类A的方法go(),而不能调用类B的方法back()
    s.go();
    s.back(); //输出back test
    }
    }