zoukankan      html  css  js  c++  java
  • Java类练习一则

    新建一个Hello类,代码拷贝进行即可运行...

    项目一 1,2

    题目:

    项目一:
    1.设计一个汽车类Auto,
    其中包含一个表示速度的double型成员变量speed和表示启动的start()方法、
    表示加速的speedUp()方法以及表示停止的stop()方法。方法体内写一个输出语句即可。
    
    2.再设计一个Auto类的子类Bus表示公共汽车,
    在Bus类中定义一个int型的表示乘客数的成员变量passenger,
    另外定义两个方法getOn()和getOff()表示乘客上乘和下车。
    编写一个应用程序BusTest,通过向下转型分别输出子类对象中的各成员变量和方法。
    
    3.改写程序,定义一个接口A包含一个返回值为double类型的抽象方法distance()和一个全局常量HOUR=10,
    定义另一个接口B包含一个返回值为double类型的抽象方法cost(),
    分别定义三个类Bus、Train、Plane都实现A、B两接口,Bus类包含一个常量SPEED=60,
    同时覆写distance()方法,计算距离=时间*速度。
    覆写cost()方法,在cost()方法下声明一个double类型的常量COSTOFPERKILOMETER=2.5,通过调用distance()方法乘以常量COSTOFPERKILOMETER作为返回结果;
    Train类包含一个常量SPEED=130,同时覆写distance()方法,计算距离=时间*速度。
    覆写cost()方法,在cost()方法下编写流程控制结构,如果输入“儿童”,返回值是72.6,如果输入“成人”,返回值是145.2;
    Plane类包含一个常量SPEED=315,同时覆写distance()方法,计算距离=时间*速度。
    覆写cost()方法,在cost()方法下编写流程控制结构,如果输入“经济舱”,返回值是1123.5,如果输入“商务舱”,返回值是2315.5;
    通过测试程序Test类,分别实例化Bus、Train、Plane对象,并调用每个对象的两个方法。
    
    // 汽车类
    class Auto {
    	
    	private double speed = 0.0;  // 速度
    	
    	// 启动方法
    	public void start() {
    		System.out.println("汽车正在启动...");
    	}
    	
    	// 加速方法
    	public void speedUp() {
    		System.out.println("汽车开始加速...");
    		this.speed += 1.23;
    	}
    	
    	// 停止方法
    	public void stop() {
    		System.out.println("汽车即将停止...");
    	}
    	
    }
    
    // Bus类继承汽车类
    class Bus extends Auto{
    	
    	private int passenger = 0;  // 人数
    	
    	// 上车方法
    	public void getOn() {
    		System.out.println("上车请往后走...");
    		this.passenger += 1;
    	}
    	
    	// 下车方法
    	public void getOff() {
    		System.out.println("下车请注意安全...");
    	}
    	
    }
    
    // 主类 & 测试类
    class Hello {
    	public static void main(String[] args) {
    		
    		// 向上转型
    		Auto auto = new Bus();
    		// 向下转型
    		Bus bus = (Bus)auto;
    		// 调用方法
    		bus.start();
    		bus.getOn();
    		bus.speedUp();
    		bus.getOff();
    		bus.stop();
    		
    	}
    }
    

    运行结果:

    项目一 3

    import java.util.Scanner;
    
    // 接口A
    interface A {
    	public static final int HOUR = 10;  // 时间
    	double distance();
    }
    
    // 接口B
    interface B {
    	double cost();
    }
    
    // 公共汽车类
    class Bus implements A, B {
    	
    	private final int SPEED = 60;  // 速度常量
    
    	@Override
    	public double cost() {
    		final double COSTOFPERKILOMETER = 2.5;
    		double result = distance()*COSTOFPERKILOMETER;
    		return result;
    	}
    
    	@Override
    	public double distance() {
    		return HOUR*SPEED;
    	}
    	
    }
    
    // 火车类
    class Train implements A, B {
    	
    	private final int SPEED = 130;  // 速度常量
    	Scanner scanner = new Scanner(System.in);
    
    	@Override
    	public double cost() {
    		while(true) {
    			System.out.print("坐火车请输入乘客类型: ");
    			String kind = scanner.nextLine();
                            // 下面这种比较,"成人"文字串放到前面更好,也就是:"成人".equals(kind)
                            // 因为这样,即使kind是null也不会出错
    			if (kind.equals("成人")) {
    				return 145.2;
    			} else if (kind.equals("儿童")) {
    				return 72.6;
    			} else {
    				System.out.println("输入有误,请重新输入");
    			}
    		}
    	}
    
    	@Override
    	public double distance() {
    		return HOUR*SPEED;
    	}
    	
    }
    
    // 飞机类
    class Plane implements A, B{
    	
    	private final int SPEED = 315;  // 速度常量
    	Scanner scanner = new Scanner(System.in);
    
    	@Override
    	public double cost() {
    		while(true) {
    			System.out.print("坐飞机请输入座席类型: ");
    			String kind = scanner.nextLine();
    			if (kind.equals("经济仓")) {
    				return 1123.5;
    			} else if (kind.equals("商务仓")) {
    				return 2315.5;
    			} else {
    				System.out.println("输入有误,请重新输入");
    			}
    		}
    	}
    
    	@Override
    	public double distance() {
    		return HOUR*SPEED;
    	}
    	
    }
    
    // 主类 & 测试类
    class Hello {
    	public static void main(String[] args) {
    		// 实例化汽车类并测试方法
    		Bus bus = new Bus();
    		System.out.println("汽车距离: " + bus.distance());
    		System.out.println("坐汽车人花费: " + bus.cost());
    		System.out.println("--------------------------");
    		
    		// 实例化火车类并测试方法
    		Train train = new Train();
    		System.out.println("火车距离: " + train.distance());
    		System.out.println("坐火车花费: " + train.cost());
    		System.out.println("--------------------------");
    		
    		// 实例化飞机类并测试方法
    		Plane plane = new Plane();
    		System.out.println("飞机距离: " + plane.distance());
    		System.out.println("坐飞机花费: " + plane.cost());
    		System.out.println("--------------------------");
    	}
    }
    

    运行结果:

    项目二 4,5,6,7

    题目:

    项目二: 
    4.定义一个Shape(几何形状)抽象类,在该类中定义一个String类型的成员变量name,对该成员变量进行修改和获取值的方法;
    一个抽象方法perimeter()求周长,一个抽象方法area()求面积;
    另外定义构造方法Shape(String name)和Shape();方法 display(){System.out.println(“This is a shape:”+getName);}。 
    
    5.分别定义Circle(圆形)类,Rectangle(矩形)类,让他们都继承Shape类。在Circle类中包含一个double型变量radius;
    在Rectangle类中包含一个double型的变量width和一个一个double型的变量length;实现对成员变量进行修改和获取值的方法;
    实现带参和无参构造方法;实现抽象方法;重载display()方法。 
    
    6.编写一个ShapeTest类,用Math.random()实现随机生成圆形或矩形;用静态方法show(Shape s)调用display()方法显示。 
    
    7.改写程序,定义一个接口A,将display()方法的定义放入A接口中,让ShapeTest类实现该接口。
    
    // 几何形状抽象类
    abstract class Shape {
    	
    	// 形状名
    	private String name;
    	
    	// 构造方法
    	Shape(){};
    	Shape(String name) {
    		this.name = name;
    	}
    		
    	// 求周长
    	abstract void perimeter();
    	
    	// 求面积
    	abstract void area();
    	
    	// 信息输出函数
    	public void display() {
    		System.out.println("This is a shape: " + getName());
    	}
    	
    	// Getter & Setter
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	public String getName() {
    		return this.name;
    	}
    }
    
    // 圆类
    class Circle extends Shape {
    	
    	private double radius;
    
    	public Circle() {};
    	public Circle(double radius) {
    		super();
    		this.radius = radius;
    	}
    
    	@Override
    	void perimeter() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	void area() {
    		// TODO Auto-generated method stub
    		
    	}
    	
    	@Override
    	public void display() {
    		super.display();
    		System.out.println("And Radius is: " + getRadius());
    	}
    
    	// Setter & Getter
    	public double getRadius() {
    		return this.radius;
    	}
    
    	public void setRadius(double radius) {
    		this.radius = radius;
    	}
    
    	
    }
    
    // 矩形类
    class Rectangle extends Shape {
    	
    	private double width;
    	private double length;
    
    	public Rectangle() {};
    	public Rectangle(double width, double length) {
    		super();
    		this.width = width;
    		this.length = length;
    	}
    
    	@Override
    	void perimeter() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	void area() {
    		// TODO Auto-generated method stub
    		
    	}
    	
    	
    	@Override
    	public void display() {
    		super.display();
    		System.out.println("Width is: " + getWidth());
    		System.out.println("Length is: " + getLength());
    	}
    	
    	// Setter & Getter
    	public double getWidth() {
    		return this.width;
    	}
    
    	public void setWidth(double width) {
    		this.width = width;
    	}
    
    	public double getLength() {
    		return this.length;
    	}
    
    	public void setLength(double length) {
    		this.length = length;
    	}
    	
    }
    
    // 独立测试类
    class ShapeTest {
    			
    	public static void show(Shape shape) {
    		shape.display();
    	}
    	
    		Circle circle = new Circle(radius);
    		Rectangle rectangle = new Rectangle(length=length, width=width);
    		circle.setName("圆圆圆");
    //		show(circle);
    		circle.display();
    		rectangle.setName("方方方");
    //		show(rectangle);
    		rectangle.display();
    	}
    
    	@Override
    	public void display(Shape shape) {
    		shape.display();
    	}
    	
    }
    
    // 主类 & 测试类
    class Hello {
    	public static void main(String[] args) {
    		ShapeTest.main(args);
    	}
    }
    

    运行结果:

    项目三、8

    题目:

    项目三:
    8.设计一个根据雇员类型利用abstract方法和多态性完成工资单计算的程序。
    Employee是抽象类;Employee的子类有Boss(每星期发给他固定工资,而不计工作时间)、CommissionWorker(除基本工资外还根据销售额发放浮动工资)、
    PieceWorker(按其生产的产品数发放工资)、HourlyWorker(根据工作时间长短发放工资)。
    
    该例的Employee的每个子类都声明为final,因为不需要再继承它们生成子类。
    在父类中声明earnings()为抽象方法,并且对于每个子类都提供恰当的earnings()实现方法。
    对所有雇员类型都使用earnings()方法,但每个人挣的工资按他所属的雇员类计算,所有雇员类都是从父类Employee派生出的。
    
    为了计算雇员的工资,程序仅仅使用雇员对象的一个父类引用并调用earnings()方法。
    一个实际的工资系统中,各种Employee对象的引用可以通过一个Employee引用数组来实现。
    程序依次使用数组的每个元素(Employee引用)调用每个对象的employee()方法。
    
    // 抽象雇员类
    abstract class Employee {
    
    	// 声明薪水变量和挣钱方法
    	private double salary = 0;
    	abstract void earnings();
    	
    	// Setter & Getter
    	public double getSalary() {
    		return salary;
    	}
    	
    	public void setSalary(double salary) {
    		this.salary = salary;
    	}
    		
    }
    
    // 老板不干活还领固定工资没办法
    final class Boss extends Employee {
    
    	private int Day = 0;
    	private static final double MONTHLY_PAY = 8040;  // 老板的月薪
    	
    	public Boss() {
    		super();
    	}
    	
    	// 用于初始化一个干了Day天活的老板
    	public Boss(int Day) {
    		super();
    		this.Day = Day;
    	}
    
    	@Override
    	void earnings() {
    		setSalary(MONTHLY_PAY * Day);
    		System.out.println("这个老板可以领:" + getSalary() + "元工资。");
    	}
    	
    }
    
    // 正式工有底薪还有补助你说气不气
    final class CommissionWorker extends Employee {
    
    	private int Day = 0;
    	private double DayPay = 60.4;  // 每天加薪
    	private static final double MONTHLY_PAY = 2000;  // 正式工的月薪
    	
    	
    	public CommissionWorker() {
    		super();
    	}
    	
    	// 用于初始化一个干了Day天活的正式工
    	public CommissionWorker(int Day) {
    		super();
    		this.Day = Day;
    	}
    
    
    	@Override
    	void earnings() {
    		setSalary(MONTHLY_PAY + Day*DayPay);
    		System.out.println("这个正式工的工资是: " + getSalary() + "元人民币。");
    	}
    	
    }
    
    // 计件工多劳多得,适合能力强的
    final class PieceWorker extends Employee {
    
    	private int pieces = 0;  // 亻牛数
    	private final double PIECES_PRICE = 96.4;  // 件工资
    	
    	public PieceWorker() {
    		super();
    	}
    	
    	// 初始化一个干了pieces件的计件工
    	public PieceWorker(int pieces) {
    		super();
    		this.pieces = pieces;
    	}
    
    	@Override
    	void earnings() {
    		setSalary(pieces*PIECES_PRICE);
    		System.out.println("这个计件工的工资是: " + getSalary() + "元人民币。");
    	}
    	
    }
    
    // 小时工就按时间算了,钱少不过偶尔可以偷个懒不是
    final class HourlyWorker extends Employee {
    
    	private int hour = 0;  // 小时
    	private final double HOUR_PRICE = 78.9;  // 小时工资
    	
    	
    	public HourlyWorker() {
    		super();
    	}
    	
    	public HourlyWorker(int hour) {
    		super();
    		this.hour = hour;
    	}
    
    	@Override
    	void earnings() {
    		setSalary(hour*HOUR_PRICE);
    		System.out.println("这个小时工的工资是: " + getSalary() + "元人民币。");
    	}
    	
    }
    
    
    // 主类 & 测试类
    class Hello {
    	
    	public static void main(String[] args) {
    		
    		// 初始化一个雇员数组
    		Employee employee[] = new Employee[4];
    		employee[0] = new Boss(23);
    		employee[1] = new CommissionWorker(33); 
    		employee[2] = new PieceWorker(44);
    		employee[3] = new HourlyWorker(55);
    		
    		// 循环调用方法
    		for (Employee worker:employee) {
    			worker.earnings();
    		}
    	}
    }
    

    上面这个代码的主类还可以这样写:

    // 主类 & 测试类
    class Hello {
    	
    	public static void main(String[] args) {
    
    		// 初始化一个雇员数组
    		ArrayList<Employee> employee = new ArrayList<>();
    		employee.add(new Boss(23));
    		employee.add(new CommissionWorker(33));
    		employee.add(new PieceWorker(44));
    		employee.add(new HourlyWorker(55));
    		
    		// 循环调用方法
    		for (Employee worker:employee) {
    			worker.earnings();
    		}
    	}
    }
    

    运行结果:

  • 相关阅读:
    【小程序】文本超出则省略号
    【wx小程序】读懂app.js
    【js】某字符串多次替换
    【小程序】本地资源图片无法通过 WXSS 获取
    【小程序】(一)注册开始小程序开发
    【小程序】配置本地接口开发
    【css】文本超出行数以省略号显示
    【webstorm】project目录树显示不出
    【Nodejs】Browsersync同步浏览器测试
    获取指定包名下继承或者实现某接口的所有类(扫描文件目录和所有jar)
  • 原文地址:https://www.cnblogs.com/amnotgcs/p/13886899.html
Copyright © 2011-2022 走看看