在哪个著名的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";
}}
其实
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";
}}
基础的东西,好好看书先
first s=new second();
s的实际类型是second(),而first是形式类型,如果调用s.method()方法时,
会执行实际类型的。而var 还时first的。
多态的定义:当某变量的实际类型与形式类型不一致时,调用次变量的method,一定会调用实际类型的版本。