大神来看看

来源:9-7 Java 中的 super 的使用

dapatpat

2015-04-23 11:00

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;
	}
}
public class car extends Bus {  //子类轿车类
	public void showSeat(){ //方法重写
		this.seat=4;
		System.out.println("子类car的座位数为"+seat);
		System.out.println("父类的Bus的座位数为"+super.seat);
	}
	public car(int seat){ //带参构造方法
		super(seat);
		System.out.println("子类的构造方法");
	}
}
public class test {
	public static void main(String[] args){
		car honda=new car(55);
		honda.showSeat();
	}
}

问下大神  为什么输出是:

子类car的座位数为4

父类的Bus的座位数为4

我只是在构造方法里面给seat赋了一个值55吧 

写回答 关注

3回答

  • Refactor易先生
    2015-06-14 16:51:54

    在car子类中的showseat方法你用this.seat,因为子类里面没有重新定义seat变量,所以系统默认此时你调用的是父类的seat,所以当你的程序执行到这的时候你原来给父类seat赋值55在这被覆盖了,所以结果是4。如果你把this.seat=4改成int seat=4,在子类里面重新定义一个和父类一样的变量,此时输出结果就对了。

  • ybbzbb
    2015-04-23 13:34:37

    额.....你给父类的赋值没有用啊,你调用的是子类的方法.....他不会调用父类的方法的。只是在实例化Car的时候会先实例化父类的构造方法。


  • ybbzbb
    2015-04-23 12:36:05

    你Car的showSeat方法中,你给seat赋了4

    在main方法中调用了car对象的showSeat方法....

    dapatp...

    我的car的构造方法是会给Bus.seat赋值为55的 我刚才在car的showseat方法里面this.seat之前和之后都输出了一下super.seat 之前输出的是55 但是之后输出的就变成了4 不知道为什么这里的this.seat把父类的seat都给改了。。。。。

    2015-04-23 13:27:57

    共 1 条回复 >

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530649 学习 · 6091 问题

查看课程

相似问题