class A{
void callme( ){
System.out.println("Inside A's callme( ) method");
}}
class B extends A{
void callme( ){
System.out.println("Inside B's callme( ) method");
}}
public class Dispatch{
public static void main( String args[ ] ){
A a = new B( );
a.callme( );
}
}
A a = new B( );
这个,一般是A a = new A()吧?还有 B是个类, 而B()是怎么来的求教~~谢啦

解决方案 »

  1.   

    其实,在用到这种方法的时候,类A一般都是抽象类,它的子类B重写了类A的方法!
    关于A a=new B();   对象a调用的构造函数,其实是类B的!因为类A是抽象类,无法定义对象。                                                                    个人观点啊!
      

  2.   

    问题是,这个A不是抽象类啊根本就没有abstract修饰。A a=new A();也是可以执行的
      

  3.   

    A a = new B( );
    在这里创建了两个对象:
    A ,B
    用A的引用指向B对象,这叫上转型,父类对象引用了子类对象。两个构造函数都调用了。
      

  4.   

    这就是多态!把子类创建的对象的引用放到一个父类的对象中,就得到了该对象的一个上转型对象。那么这个上转的对象在调用这个方法时就可能具有多态性了!因为有可能有多个类都extends A ,
      

  5.   

    A a = new A()是可以的,但A a = new B()更好,这叫父类对象持有子类的引用,典型的多态,这样写有更好的扩展性,在java里面是很常见的,如List l = new ArrayList()
      

  6.   

    a是上转型对象;调用子类B 声明a
      

  7.   

    a 是A类的一个对象,但是a引用的是B的对象,所以a能够调用B类里面的方法,但是不能调用B类自己特有的方法。如果B自己有一个方法,但在父类A里面没有,则a不能调用该方法
      

  8.   

    大家说得已经很详细了,主要是多态问题。
    另外,可验证7楼的说法:两个构造函数都调用了class A{
        A(){//void callme( ){
        System.out.println("Inside A's callme( ) method");
    }}
    class B extends A{
        B(){//void callme( ){
        System.out.println("Inside B's callme( ) method");
    }}
    public class Dispatch{
        public static void main( String args[ ] ){
            A a = new B( );
           // a.callme( );
        }
    }
      

  9.   

    多态咯,楼上这么多人已经说的很清楚了public class Dispatch{
        public static void main( String args[ ] ){
            A a = new B( );   //B a=new B();
            a.callme( );      //a.callme();
        }
    }
     
    楼主写的代码和注释里的代码其实是一样的,最后都是输出“Inside B's callme( ) method”