我的代码有问题吗?在构造方法中用了super以后,是不是再调用父类的时候用this或super都行呢
来源:5-2 编程练习
Quantitative
2019-11-19 00:03:41
package com.imooc.homework5; public class Test { public static void main(String[] args){ //实例化父类对象,并传入两组相同的属性值 Car car1 = new Car("黑色","V"); Car car2 = new Car("黑色","V"); Car car3 = new Car("白色","V"); car1.use(); System.out.println(car1.equals(car2)); System.out.println(car1.equals(car3)); //调用父类use方法 //通过重写equals方法,比较两个对象是否相等 System.out.println("=================================="); //实例化子类Taxi对象,并传入属性值 Taxi taxi = new Taxi("长生"); taxi.ride(); taxi.use(); System.out.println(taxi.toString()); //调用ride和use方法 //输出重写toString后的taxi信息 System.out.println("=================================="); //实例化子类HomeCar对象,并传入属性值 HomeCar hc = new HomeCar(7); hc.display(); hc.display(5); //调用display方法及它的重载方法 } } package com.imooc.homework5; public class Car { //属性:车的颜色color、车主姓名userName private String color; private String userName; public Car(){ } public Car(String color,String userName) { this.setColor(color); this.setUserName(userName); } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public void use() { System.out.println("我是机动车!"); } public boolean equals(Object ob) { if(ob == null) { return false; } Car temp = (Car)ob; if(this.getColor().equals(temp.getColor()) && this.getUserName().equals(temp.getUserName())) { return true; } else { return false; } } //带参构造函数(参数为color和userName) //通过封装实现对私有属性的get/set操作 //创建无参无返回值得方法use(描述内容为:我是机动车!) //重写equals方法,比较两个对象是否相等(比较color,userName) } package com.imooc.homework5; public class Taxi extends Car{ //私有属性:所属公司( company) private String company; public Taxi(){ } //调用父类的构造方法,完成属性赋值 public Taxi(String company) { super("蓝色","张小泉"); this.setCompany(company); } public String getCompany() { return company; } public void setCompany(String company) { this.company = company; } //通过封装实现对私有属性的get/set操作 public final void ride() { System.out.println(super.getUserName()+"的出租车是所属于"+this.getCompany()+"公司的"); } //创建不允许重写的ride方法,描述为:**出租车是所属于***公司的。 //重写父类use方法,描述为:出租车是提高市民生活质量的重要条件之一 public void use() { System.out.println("出租车是提高市民生活质量的重要条件之一"); } //重写toString方法,输出的表现形式不同(输出color,userName) public String toString() { return "Taxi的信息是:"+this.getUserName()+"拥有一辆"+this.getColor()+"的出租车"; } } package com.imooc.homework5; public final class HomeCar extends Car{ //私有属性:载客数(num) private int num; public HomeCar(){ } public HomeCar(int num) { super("紫色","孙二娘"); this.setNum(num); } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public void display() { System.out.println(this.getUserName()+"拥有的"+this.getColor()+"的私家车,有"+this.getNum()+"座位"); } public void display(int num) { System.out.println("家用汽车大多有"+num+"个座位"); } //带参构造方法为所有属性赋值 //通过封装实现对私有属性的get/set操作 //创建无参无返回值的display方法,表现为:**拥有的**颜色的私家车,有**座位 //重载display方法(带参数num),描述为:家用汽车大多有**个座位 }
严格来说,是用this.getUserName(),this.getColor() 还是用super.getUserName(),super.getColor()呢
1回答
同学你好,代码编写的不错,这里使用this或者super都是可以的,但是严格来说,建议使用this进行调用,因为this是指当前对象,而super是指向当前对象的父类。调用当前对象的getUserName(),可以明确,获取的是子类属性信息。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
相似问题