package com.imooc3; public class Bus { int seat;//座位数 float price; public void showSeat(){ this.seat=47; System.out.println("Bus的座位数为:"+seat); } public Bus(int seat){ System.out.println("父类的构造方法"); this.seat=seat; } package com.imooc3; public class Car extends Bus { public void showSeat(){ //方法重写 System.out.println("父类的Bus的座位数为"+super.seat); int seat=4;//为什么把该变量的定义放在方法外就可以呢 System.out.println("子类car的座位数为"+this.seat); //为什么用this.seat和super.seat输出的值是一样的呢 System.out.println("父类的Bus的座位数为"+super.seat); } public Car(int seat){ //带参构造方法 super(seat); System.out.println("子类的构造方法"); } } package com.imooc3; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Car honda=new Car(55); honda.showSeat(); } } 最后结果是: 父类的构造方法 子类的构造方法 父类的Bus的座位数为55 子类car的座位数为55 父类的Bus的座位数为55
方法中int seat=4是在栈中开辟的空间,与之前的seat不是同一个,你改成this.seat就是指的同一个seat了。
this是一个本类对象的引用,指向该类自己的对象。
我不明白的地方是为什么在子类car中把int seat = 4放在方法showseat里的时候,this.seat的结果会和super.seat的结果一样。
(1)第一个问题
this.seat表示的是当前所在类成员变量。
在Java中使用super来引用父类的成员,用this来引用当前对象。
(2)第二个问题
因为在创建子类对象时, Car honda=new Car(55);
通过以下构造函数传入参数55。
public Car(int seat){ //带参构造方法
super(seat);//调用父类的构造函数
System.out.println("子类的构造方法");
}
而在子类Car的构造函数中又调用了父类Bus的构造函数super(55);
所有this.seat和super.seat都表示55。
如果这样还不明白,可以私信我