10. 定义A,B如下: 
class A { 
int a=1; 
double d=2.0; 
void show( ) { 
System.out.println("Class A:a="+a +" d="+d); 


class B extends A { 
float a=3.0f; 
String d="Java program."; 
void show( ) { 
super.show( ); 
System.out.println("Class B:a="+a +" d="+d); 


若在应用程序的main方法中定义类B的对象b: 
A b=new B();   //这句话是什么意思????
b.show(); 
则输出的结果如何?

解决方案 »

  1.   

    Class A:a=1 d=2.0
    Class B:a=3.0 d=Java program.
      

  2.   

    父类子类问题
    调用b构造函数
    new B();   内存空间生成一个B类实例
    A b        内存空间生成一个可存放A类的地址
    A b=new B();   将b指向 new b()生成的对象
    b.show(); 执行b的函数
    super.show( ); 执行A的函数
    System.out.println("Class B:a="+a +" d="+d); 结果
    Class A:a=1 d=2.0
    Class B:a=3.0 d=Java program.
      

  3.   


    A b=new B();  
    这是子类的向上转型,A类 的引用 b,调用B类的构造函数生成B类对象。
    子类向上转型后,其通过继承并覆写后的函数仍能被唤起,并能被准确识别及执行,即向上转型后的对象,其内有效的函数别调用时,能准确执行其自身未转型时的功能。
    这个机制主要由java函数(非final函数)的“后期邦定”性质保障。
      

  4.   

    ppact(天下有雪),你太有才了~~~~~,支持~~~~!!
      

  5.   

    ppact(天下有雪),你太有才了~~~~~,支持~~~~!!
    再问一个问题,是不是只有被覆盖的方法才有这样的性质,如果B中另外定义了一个新的方法show2(),就不可以被b调用的,这是为什么,希望一并解答:)
      

  6.   

    怎么没有main()方法呢?那怎么运行呢?不明白
      

  7.   

    LS的,你注意看最后几排字.
    若在应用程序的main方法中定义类B的对象b: 
    A b=new B();   //这句话是什么意思????
    b.show(); 
    则输出的结果如何?知道了吧。。分数给天下有雪拉.