在哪个著名的javaFAQ中提到了这个问题
其实
first s=new second();     
定义的仍然是一个first的对象,但是子类方法将父类方法给隐藏了
second ss = new second();------定义了一个second 的对象引用。
public class Acc
{
public  static void main(String[] args)
{
first s=new second();     //??申明方式会?生什??的?果?
second ss = new second();
System.out.println(s.var);
System.out.println(s.method());
System.out.println(ss.method());
System.out.println(ss.var);
}
}class first{
int var =1;
String method(){
return "I am method in first";
}}class second extends first{
int var =2;
String method(){
 return "I am method in Sectond";
}}

解决方案 »

  1.   

    yoyoxo已经说的很清楚了
    基础的东西,好好看书先
      

  2.   

    这里主要牵扯到多态性。
    first s=new second();     
    s的实际类型是second(),而first是形式类型,如果调用s.method()方法时,
    会执行实际类型的。而var 还时first的。
    多态的定义:当某变量的实际类型与形式类型不一致时,调用次变量的method,一定会调用实际类型的版本。
      

  3.   

    是继承,second类派生与first类,所以子类second的方法酒吧first的同名方法隐藏了
      

  4.   

    大概也只能用实型和参考型来解释了 对于s.method()的调用来说