• 6-7抽象的应用场景


    抽象类是用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的类。在这里插入图片描述

    在航运公司系统中,Vehicle类需要定义两个方法分别计算运输工具的燃料效率和行驶距离。

    问题:卡车(Truck)和驳船(RiverBarge)的燃料效率和行驶距离的计算方法完全不同。Vehicle类不能提供计算方法,但子类可以。

    解决方案:

    Java 允许类设计者指定:超类声明一个方法但不提供实现,该方法的实现由子类提 供。这样的方法称为抽象方法。有一个或更多抽象方法的类称为抽象类

    Vehicle 是一个抽象类,有两个抽象方法。

    注意:抽象类不能实例化 new Vihicle()是非法的

    public abstract class Vehicle{
        public abstract double calcFuelEfficiency();//计算燃料效率的抽象方法
        public abstract double calcTripDistance();//计算行驶距离的抽象方法
    }
    public class Truck extends Vehicle{
        public double calcFuelEfficiency(){
            //写出计算卡车的燃料效率的具体方法
        }
        public double calcTripDistance(){
            //写出计算卡车行驶距离的具体方法
        }
    }
    public class RiverBarge extends Vehicle{
        public double calcFuelEfficiency() {
            //写出计算驳船的燃料效率的具体方法
        }
        public double calcTripDistance( )  {
            //写出计算驳船行驶距离的具体方法
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    练习

    编写一个Employee类,声明为抽象类,
    包含如下三个属性:name,id,salary。
    提供必要的构造器和抽象方法:work()。
    对于Manager类来说,他既是员工,还具有奖金(bonus)的属性。
    请使用继承的思想,设计CommonEmployee类和Manager类,要求类
    中提供必要的方法进行属性访问。

    Employee类

    public abstract class Employee {
    
        private String name;
        private int id;
        private double salary;
    
        public Employee(){
            super();
        }
    
        public Employee(String name, int id, double salary) {
            super();
            this.name = name;
            this.id = id;
            this.salary = salary;
        }
    
        public abstract void work();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    Manager类

    对于 Manager 类来说,他既是员工,还具有奖金(bonus)的属性。

    public class Manager extends Employee{
    
        private double bonus;	//奖金
    
        public Manager(double bonus) {
            super();
            this.bonus = bonus;
        }
    
        public Manager(String name, int id, double salary, double bonus) {
            super(name, id, salary);
            this.bonus = bonus;
        }
    
    
        @Override
        public void work() {
            System.out.println("管理员工,提高公司运行效率。");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    CommonEmployee类

    public class CommonEmployee extends Employee {
    
        @Override
        public void work() {
            System.out.println("员工在一线车间生产产品。");
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    EmployeeTest类

    请使用继承的思想,设计 CommonEmployee 类和 Manager 类,要求类中必须提供必要的方法进行属性访问

    public class EmployeeTest {
        public static void main(String[] args) {
    
            Employee manager = new Manager("库克",1001,5000,50000);
    
            manager.work();
    
            CommonEmployee commonEmployee = new CommonEmployee();
            commonEmployee.work();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    怎样在CSDN插入代码块 怎么变色?
    C++11标准模板(STL)- 算法(std::partial_sort)
    js浮点数精度问题详解
    第二部分—C语言提高篇_11. 预处理
    库克对iPhone15充满信心,囤货8600万,却被中国5G手机气晕了
    Arm Cache学习资料大汇总
    Mysql索引(究极无敌细节版)
    腾讯云新用户优惠券领取方法及使用教程
    数据库三级(3.大规模数据库架构)
    UML(Unified Modeling Language)统一建模语言,及工具介绍、使用
  • 原文地址:https://blog.csdn.net/qq_44774198/article/details/125612577