class Base{
int count = 2;
public void display(){
System.out.println(this.count);
}
}
class Derived extends Base{
int count = 20;
@Override
public void display(){
System.out.println(this.count);
}
}
public class FieldAndMethodTest{
public static void main(String[] args){
//声明并创建一个Base对象
Base b = new Base();
System.out.println(b.count);
b.display();
System.out.println("-----(1)-----");
//声明并创建一个Derived对象
Derived d = new Derived();
System.out.println("d.count = " + d.count);
d.display();
System.out.println("-----(2)-----");
//声明一个Base变量,并将Derived对象赋给该变量
Base bd = new Derived();
System.out.println(bd.count);
bd.display();
System.out.println("-----(3)-----");
class Base{
int count = 2;
public void display(){
System.out.println(this.count);
}
}
class Derived extends Base{
int count = 20;
@Override
public void display(){
System.out.println(this.count);
}
}
public class FieldAndMethodTest{
public static void main(String[] args){
//声明并创建一个Base对象
Base b = new Base();
System.out.println(b.count);
b.display();
System.out.println("-----(1)-----");
//声明并创建一个Derived对象
Derived d = new Derived();
System.out.println("d.count = " + d.count);
d.display();
System.out.println("-----(2)-----");
//声明一个Base变量,并将Derived对象赋给该变量
Base bd = new Derived();
System.out.println(bd.count);
bd.display();
System.out.println("-----(3)-----");
而成员变量
无论编译和运行,都参考左边(引用型变量所属的类)。
System.out.println(bd.count);
System.out.println("d2b.count = " + d2b.count);
bd.count和d2b.count都将调用它们声明时类型,也就是Base类型中的count,输出结果为2 作者: 游洪波 时间: 2012-6-29 17:38
class Base{
int count = 2;
public void display(){
System.out.println(this.count);
}
}
class Derived extends Base{
int count = 20;
@Override
public void display(){
System.out.println(this.count);
}
}
public class FieldAndMethodTest{
public static void main(String[] args){
//声明并创建一个Base对象
Base b = new Base();//创建Base父类对象,这个时候和子类没有任何关系
System.out.println(b.count);//你现在输出的count属性是父类中的属性所以输出了2
b.display();//display方法也是父类中的方法所以这个方法输出的也是2,这样你能理解吧
System.out.println("-----(1)-----");
//声明并创建一个Derived对象
Derived d = new Derived();//创建Dervied子类对象,这个子类虽然继承了Base类但是,在这里又把父类中的count属性的值覆盖成了20,并且实现了父类的display方法
System.out.println("d.count = " + d.count);//这个时候count虽然是父类继承下的但是,count的值被子类中重新赋值为20,所以这里输出了20
d.display();//这个方法也是输出了count的值所以同理也是20
System.out.println("-----(2)-----");
//声明一个Base变量,并将Derived对象赋给该变量
Base bd = new Derived();//这点有点不同了,他使用了一次向上转型,即把子类对象赋给了父类。
System.out.println(bd.count);//这个使用应为bd是父类对象所以调用的属性是父类中的属性,所以这里输出的是2
bd.display();//这个方法本应该输出2的但是因为子类重写了父类的display方法所以这里使用的是子类的displaay方法,而子类的display方法输出的又是子类的count属性,所以这个地方是20
System.out.println("-----(3)-----");