2-23编程练习的小问题

2-23编程练习的小问题

public class NonMotor {
    // 私有属性:品牌、颜色、轮子(默认2个)、座椅(默认 1个)
    private String brand;
    private String color;
    private int wheel;
    private int chair;
    // 无参构造方法
    public NonMotor(){
        
    }
    // 双参构造方法,完成对品牌和颜色的赋值
     public NonMotor(String brand,String color){
        this.setBrand(brand);
        this.setColor(color);
    }
    // 四参构造方法,分别对所有属性赋值
    public NonMotor(String brand,String color,int wheel,int chair){
        this.setBrand(brand);
        this.setColor(color);
        this.setWheel(wheel);
        this.setChair(chair);
    }
   // 公有的get***/set***方法完成属性封装
    public String getBrand() {
        return brand;
    }
    public void setBrand(String brand) {
        this.brand = brand;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public int getWheel() {
        return wheel;
    }
    public void setWheel(int wheel) {
        this.wheel = wheel;
    }
    public int getChair() {
        return chair;
    }
    public void setChair(int chair) {
        this.chair = chair;
    }
    // 方法:运行,描述内容为:这是一辆**颜色的,**牌的非机动车,有**个轮子,有**个座椅的非机动车。其中**的数据由属性提供
        public String work() {
           String str="这是一辆 "+this.getColor()+"颜色的,"+this.getBrand()+"牌的非机动车,有"+this.getWheel()+"个轮子,有"+this.getChair()+"个座椅的非机动车。其中"+this.getBrand()+"的数据由属性提供";
           return str;
        }
}



public class Bicycle extends NonMotor {
    // 在构造方法中调用父类多参构造,完成属性赋值
    public Bicycle(String brand,String color){
        super(brand,color);
        this.setBrand(brand);
        this.setColor(color);
    }
    // 重写运行方法,描述内容为:这是一辆**颜色的,**牌的自行车。其中**的数据由属性提供
    public String work() {
           String str="这是一辆"+this.getColor()+"颜色的,"+this.getBrand()+"牌的自行车。其中"+this.getBrand()+"的数据由属性提供";
           return str;
        }
    
}



public class ElectricVehicle extends NonMotor {
    // 私有属性:电池品牌
    private String battery;
    // 创建构造方法,完成属性赋值
    public ElectricVehicle(String battery){
        this.setBattery(battery);
    }
    // 公有的get***/set***方法完成属性封装
    public void setBattery(String battery){
        this.battery=battery;
    }
    
    public String getBattery(){
        return this.battery;
    }
    // 重写运行方法,描述内容为:这是一辆使用**牌电池的电动车。其中**的数据由属性提供
    public String work() {
           String str="这是一辆使用"+this.getBattery()+"牌电池的电动车。其中"+this.getBattery()+"的数据由属性提供";
           return str;
        }
}




public class Tricycle extends NonMotor {
    // 在无参构造中实现对轮子属性值进行修改
    public Tricycle(int wheel){
        this.setWheel(wheel);
    }
    // 重写运行方法,描述内容为:三轮车是一款有**个轮子的非机动车。其中**的数据由属性提供
    public String work(){
        String str="三轮车是一辆有"+this.getWheel()+"个轮子的非机动车。其中"+getBrand()+"的数据由属性提供";
        return str;
    }
}




public class Test {
    public static void main(String[] args) {
        NonMotor one=new NonMotor("天宇","红",4,2);
        System.out.print("父类信息测试:"+one.work());
        System.out.println();
        Bicycle two=new Bicycle("捷安特","黄");
        System.out.print("自行车类信息测试:"+two.work());
        System.out.println();
        ElectricVehicle three=new ElectricVehicle("飞鸽");
        System.out.print("电动车类信息测试:"+three.work());
        System.out.println();
        Tricycle four=new Tricycle(3);
        System.out.print("三轮车类信息测试:"+four.work());
        
    }
}

老师,继承的2-23编程写完了,运行正常。
但是,有点小问题:
1、在程序参考运行效果图里,没有“其中**的数据由属性提供”,但是任务要求要有,这就没有参考标准了,
老师可以看下我写的符不符合规范。
2、打印三轮车信息:“三轮车类信息测试:三轮车是一辆有3个轮子的非机动车。其中null的数据由属性提供”
,我不懂,明明在父类里,父类对象one不是传了品牌的值:天宇。既然三轮车没有重新为brand赋值,那就
应该默认是父类的天宇牌啊,怎么回事null?


正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,关于同学的问题回答如下:

1、“其中**的数据是由属性提供”这是一句提示语句,表示前面的“**”的值是由属性提供的,而“其中**的数据是由属性提供”这句提示语句本身是不需要输出的。所以在题目给出的效果图中没有这句输出语句。

http://img1.sycdn.imooc.com//climg/5cc6c87900016a5a06310108.jpg

2、是的,子类继承父类。只是继承了父类的特征,父类创建的对象和子类没有关系。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 鱼儿0001 提问者 #1
    老师,关于子类继承,还有最后一个问题,我写在回答里,方便观看
    2019-04-30 16:18:29
提问者 鱼儿0001 2019-04-30 16:30:35

老师,比方说,父类是这样的:

public  class Car{

    private String color;   

    private double price;

    public Car(String color,double price){
        this.color=color;
        this.prive=price;
}

    public void show(){

    System.out.println("此车颜色是:"+this.color+",价格是:"+this.price);

}

}

子类是:

public  class Truck extends Car{

    public Truck(String color,double price){

    super(color,price);

}

}

测试类:

public class Test{

    public static void main(String[] args){

        Truck one = new Truck("鱼肚白",88880);

}

        one.show();

}

我的问题是,one的颜色价格是否通过super(color,price)传给了父类构造方法?

打印的结果是null,还是赋值后的结果。其实,我就弄不清super(color,price),到底接收到子类的实例化赋值没有?

  • 同学你好,super(color,price),首先Car类中有color和price两个属性,Truck类继承了Car类,所以此时Truck类隐含了Car类中的color和price两个属性,通过super关键字调用父类的构造方法,给子类的隐含属性color和price赋值,所以此时将传入参数赋值给子类的隐含属性color和price,子类实例化赋值成功! 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-04-30 18:59:28
  • 提问者 鱼儿0001 回复 好帮手慕小班 #2
    那能不能直接调用父类的属性:this.color="红色";
    2019-04-30 19:29:18
  • 好帮手慕阿莹 回复 提问者 鱼儿0001 #3
    java规定,要想调用父类的公有属性或方法,需要用super调用。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-05-01 16:38:34
好帮手慕珊 2019-04-28 19:58:19

你好!

关于第一个问题:其中的数据由属性提供,这是一个提示信息,可以不放到输出中

关于第二个问题:父类创建对象后的值是不会传给子类的,如果子类也需要brand值,需要自己进行设置。继承是子类继承父类的特征,跟对象是没有关系的。设置继承的目的是为了减少冗余的代码,父类有的内容,子类继承父类后就不用再写了,继承后的内容在子类虽然没有写出来但都是存在的,所以子类本身也具有这些属性和方法,因此,子类创建对象的时候和父类对象是没有关系的。

在子类的构造方法中,可以通过super关键字为从父类继承的属性赋值。构造方法还需要有一个brand参数。

http://img1.sycdn.imooc.com//climg/5cc59482000171a005550116.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 鱼儿0001 #1
    老师,经过你的分析后,我有几点疑问。1、还真的放,因为“其中**的数据由属性提供”,既然都在句子里打了**,说明打雪花星星的部分得填东西吧? 2、老师的意思是,子类继承的父类的属性、方法,像是继承了一个模子,而不是父类对象实例化后的具体的属性和方法?
    2019-04-29 11:34:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师