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。
如果这样还不明白,可以私信我