10.继承

该程序是一个Java应用,用于计算基于重量和路程的卡车和火车运输费用。用户输入货物重量和运输路程,程序通过卡车和火车类的继承与重写方法来确定不同运输方式的费用。卡车费用在重量和路程超过一定值时返回-1,火车费用则根据路程长短有不同的计价标准。

测试类

package com.duixiang.Demo14;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("请你输入货物的重量(单位t)");
        int x = sc.nextInt();
        System.out.println("请输入运输路程(单位km)");
        int y = sc.nextInt();
        Sss.jifei(x,y);
    }
}

方法类

package com.duixiang.Demo14;

public class Sss {
    public static void jifei(int x, int y){
        Yun a = new Ka(x,y);
        Yun b = new Huo(x,y);
        System.out.println("卡车的收费为:"+a.jifei());
        System.out.println("火车的收费为:"+b.jifei());
    }
}

运输工具类

package com.duixiang.Demo14;

public class Yun {
    private int zhong;
    private int ju;

    public Yun(int zhong, int ju) {
        this.zhong = zhong;
        this.ju = ju;
    }

    public Yun() {
    }

    public int getZhong() {
        return zhong;
    }

    public void setZhong(int zhong) {
        this.zhong = zhong;
    }

    public int getJu() {
        return ju;
    }

    public void setJu(int ju) {
        this.ju = ju;
    }

    public int jifei(){
        return 0;
    }
}

卡车类

package com.duixiang.Demo14;

public class Ka extends Yun{
    public Ka(int zhong, int ju) {
        super(zhong, ju);
    }

    @Override
    public int jifei() {
        if(this.getJu()>1000||this.getZhong()>60){
            return -1;
        }else {
            return getZhong()*getJu()*120;
        }
    }
}

火车类

package com.duixiang.Demo14;

public class Huo extends Yun{
    public Huo(int zhong, int ju) {
        super(zhong, ju);
    }

    @Override
    public int jifei() {
        if(this.getJu()<900){
            return getJu()*getZhong()*250;
        }else {
            return getJu()*getZhong()*300;
        }
    }
}

### 继承的定义及其特点 继承是面向对象编程(OOP)中的核心概念之一,它允许一个类(子类或派生类)从另一个类(父类或基类)中继承属性和方法[^1]。通过继承,子类可以复用父类的功能,且可以选择性地重定义或扩展这些功能以满足特定需求。 #### 1. 继承的定义 继承是一种机制,使得一个类可以基于另一个类进行定义,从而实现代码复用和层次化设计。子类会自动拥有父类的所有非私有字段和方法[^1]。例如,在 Java 中,可以通过 `extends` 关键字实现类的继承: ```java class Animal { void eat() { System.out.println("This animal is eating."); } } class Dog extends Animal { void bark() { System.out.println("The dog is barking."); } } ``` 在上述代码中,`Dog` 类继承了 `Animal` 类,因此 `Dog` 类不仅拥有自己的 `bark` 方法,还继承了 `Animal` 类的 `eat` 方法。 #### 2. 继承的特点 - **代码复用**:子类可以直接使用父类中定义的属性和方法,减少重复代码的编[^1]。 - **扩展性**:子类可以在不修改父类的情况下,添加新的功能或覆盖父类的方法,以满足特定需求[^1]。 - **多态性**:继承为多态提供了基础,使得父类引用可以指向子类对象,从而实现动态绑定[^1]。 - **层次结构**:通过继承,类之间可以形成一种层次化的结构,便于管理和维护复杂系统[^1]。 #### 示例代码 以下是一个展示继承特点的完整示例: ```java class Vehicle { void startEngine() { System.out.println("Engine started."); } } class Car extends Vehicle { void drive() { System.out.println("Car is driving."); } // 特性重定义 @Override void startEngine() { System.out.println("Car engine started with a key."); } } public class Main { public static void main(String[] args) { Car myCar = new Car(); myCar.startEngine(); // 输出: Car engine started with a key. myCar.drive(); // 输出: Car is driving. Vehicle vehicle = new Car(); // 多态性 vehicle.startEngine(); // 输出: Car engine started with a key. } } ``` 在上述代码中,`Car` 类继承了 `Vehicle` 类,重定义了 `startEngine` 方法,同时添加了新的 `drive` 方法。 #### 3. 特性重定义与特性重命名 - **特性重定义**:子类可以通过 `@Override` 注解重新定义父类的方法,改变其行为,但保持方法签名不变[^1]。 - **特性重命名**:某些语言(如 Python)支持通过别名调用父类方法,但这非标准 OOP 的继承特性[^1]。 #### 注意事项 尽管继承具有诸多优点,但也可能导致代码耦合度过高。因此,在设计时需谨慎使用,避免深继承链带来的复杂性和维护困难。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值