问答详情
源自:9-7 Java 中的 super 的使用

this.seat调用的是父类的还是调用的子类的??为什么子类this.seat和super.seat的输出值是一样的呢?求指教!!

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

 

提问者:Refactor易先生 2015-06-14 19:27

个回答

  • 疯車
    2015-06-16 08:45:18

    方法中int seat=4是在栈中开辟的空间,与之前的seat不是同一个,你改成this.seat就是指的同一个seat了。

  • MM442888
    2015-06-15 11:59:04

    this是一个本类对象的引用,指向该类自己的对象。

  • Refactor易先生
    2015-06-14 23:03:28

    我不明白的地方是为什么在子类car中把int seat = 4放在方法showseat里的时候,this.seat的结果会和super.seat的结果一样。

  • 丶小八戒
    2015-06-14 21:11:19

    (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。


    如果这样还不明白,可以私信我