初学JAVA 对一些东西不是很了解,谁能告诉我下面这道题最后的结果是什么? 为什么是? 步骤是如何进行的?  最好能一步一步讲解一下
abstract class Base
{ String var="Base'sVariable";
  abstract void method1();  void method2(){System.out.println("call Base method2");}  void test1()
{
   method1();
}  void test2()
   {
     method2();
   }
}  public class Extension extends Base
{
   String var = "Extension's Variable";
   void method1() 
   {System.out.println("call Extension's method1");}
   void method2() 
   {System.out.println("call Extension's method2");}   void test3()
 {
   String var="Extension Local variable";
   System.out.println("varis"+var);
   System.out.println("this.var is"+this.var);
   System.out.println("super.var is"+super.var);   method2();
   this.methoad2();
}public static void main(String args[])
{
  Extension ex = new Extension();
  ex.tes1();
  ex.tes2();
  ex.tes3();
    }
}
    

解决方案 »

  1.   

    call Extension's method1
    call Extension's method2
    varisExtension Local variable
    this.var isExtension Local variable
    super.var isBase'sVariable是这个结果吗 初学 望高人给正确答案
      

  2.   

    的确不对。继承后按照你的意思 应该是重写父类的方法
    test1()
    test2()而不是method1(),method2()
      

  3.   

    首先是定义了基类;然后是定义了扩展类;然后主程序里创建基类,  
      Extension ex = new Extension(); 
      ex.tes1(); 
      ex.tes2(); 
      ex.tes3(); 通过调试,来区分什么情况会执行基类的方法,什么情况是执行的扩展类的方法;
      

  4.   

    abstract class Base
    { String var="Base's Variable";
      abstract void method1();  //需要子类实现的抽象方法   void method2(){System.out.println("call Base method2");}   void test1()
    {
      method1();
    }   void test2()
      {
        method2();
      }
    }   public class Extension extends Base
    {
      String var = "Extension's Variable"; //覆盖父类的变量
      void method1()  //实现父类的方法
      {System.out.println("call Extension's method1");}
      void method2() //重写父类的方法
      {System.out.println("call Extension's method2");}   void test3()
    {
      String var="Extension Local variable";
      System.out.println("varis"+var);
      System.out.println("this.var is"+this.var);
      System.out.println("super.var is"+super.var);   method2();
      this.methoad2();
    } public static void main(String args[])
    {
      Extension ex = new Extension();
      //1.先调用父类的构造方法
      //2.调用子类的构造方法
      ex.tes1(); //打印 call Extension's method1
      ex.tes2(); //打印 call Extension's method2
      ex.tes3(); 
      //打印  varis Extension Local variable
      //打印  this.var is  Extension's Variable
      //打印  super.var is Base's Variable
        }

    }
    你方法没有错!
      

  5.   

    Extension 继承 Base 
    必须实现抽象方法 method1();
    ex.tes1(); 
    打印System.out.println("call Extension's method1");重写method2();
    ex.tes2();
    打印System.out.println("call Extension's method2");重写后的值
    method3()
    //*******************************
    System.out.println("varis"+var);  //打印"Extension's Variable"子类定义的值
    System.out.println("this.var is"+this.var); //打印基类var值Base'sVariable
    System.out.println("super.var is"+super.var); //继承基类,同上method2(); //打印未继承的值call Extension's method2
    this.methoad2(); //打印基类的值 call Base method2刚才没看到
    abstract void method1(); 
    void method2(){System.out.println("call Base method2");} 
    这2个方法
      

  6.   

    7楼的解释好像不对吧
    结果:
    call Extension's method1
    call Extension's method2
    varisExtension Local variable
    this.var isExtension's Variable
    super.var isBase'sVariable
    call Extension's method2
    call Extension's method2
    就是子类复写父类的方法
      

  7.   

    楼主的程序没有问题,只不过是在 main 方法中调用扩展类时把扩展类的方法名弄错了
      

  8.   

    我的方法就是从main函数开始,一步一步的跟着走,就出结果了
      

  9.   

    我运行了下程序,结果是这样的
    call Extension's method1
    call Extension's method2
    varisExtension Local variable
    this.var isExtension's Variable
    super.var isBase'sVariable
    call Extension's method2
    call Extension's method2说明七楼的解释有问题:(this.methoad2(); //打印基类的值 call Base method2  System.out.println("this.var is"+this.var); //打印基类var值Base'sVariable)  this调用的是Extension类的ex对象的属性和方法。