28. java 面向对象

一、猜数字

1. Number

package GuessTheNumber;

import java.util.Scanner;

/**
 * @ Author HuQi
 * @ Date 2020/2/2 14:52
 * @ Version 1.0
 * ---------------------------
 */
public class Number {
    private int num;

    public Number(int num) {
        this.num = num;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    private boolean guess(int num) {
        if (num > this.num) {
            System.out.println("太大");
            return false;
        } else if (num < this.num) {
            System.out.println("太小");
            return false;
        } else {
            System.out.println("猜对了");
            return true;
        }
    }

    public void start(Number number) {
        //创建扫描器对象
        Scanner sc = new Scanner(System.in);
        //重复猜数字
        while (true) {
            System.out.println("请输入数字:");
            int num = sc.nextInt();
            boolean result = number.guess(num);
            if (result == true) {
                break;
            } else {
                continue;
            }
        }
    }
}

2. RandomNum

package GuessTheNumber;


/**
 * @ Author HuQi
 * @ Date 2020/2/2 14:50
 * @ Version 1.0
 * ---------------------------
 * 要求:定义一个类,有一个数字属性 int num,在构造器中对数字初始化
 * 要求产生1-100之间随机数
 *
 */
public class RandomNum {
    public static void main(String[] args) {
        Number number = new Number((int) (Math.random() * 100 + 1));
        //启动游戏
        number.start(number);
    }
}

二、程序运行时间

1. RunTime

package TestAbstract;

/**
 * @ Author HuQi
 * @ Date 2020/2/2 15:15
 * @ Version 1.0
 * ---------------------------
 * 记录程序运行时间:使用System.currentTimeMillis
 * 设计一个类,实现可以记录任何代码运行的时间
 * 提示:抽象方法和抽象类
 * 抽象方法特点:必须被子类重写如果子类重写了父类方法,将来调用会调用子类的方法
 *
 */
public class RunTime extends Timer {
    public static void main(String[] args) {
        RunTime runTime = new RunTime();
        runTime.start();
    }

    @Override
    public void proceed() {
        for (int i = 0; i < 10000 ; i++) {
            System.out.println(i);
        }
    }
}

2. Timer

package TestAbstract;

/**
 * @ Author HuQi
 * @ Date 2020/2/2 15:20
 * @ Version 1.0
 * ---------------------------
 * 要求:一定要被子类继承才能使用,用于记录某段程序的运行时间
 */
public abstract class Timer {

    //被子类重写,用于定义要执行的代码
    public abstract void proceed();
    //将此方法修饰为final,子类不可重写,但可调用
    public final void start(){
        //记录起始时间
        long startTime = System.currentTimeMillis();
        //执行代码
        proceed();
        //记录结束时间
        long endTime = System.currentTimeMillis();
        System.out.println("程序耗时:" + (endTime - startTime) + "ms");
    }

}

三、不同形状面积周长

1. Shape

package InterfaceTest;

/**
 * @ Author HuQi
 * @ Date 2020/2/2 15:33
 * @ Version 1.0
 * ---------------------------
 */
public interface Shape {
    //计算面积
    double area();
    //计算周长
    double length();
}

2. Rectangle

package InterfaceTest;

/**
 * @ Author HuQi
 * @ Date 2020/2/2 15:38
 * @ Version 1.0
 * ---------------------------
 * 矩形
 */
public class Rectangle implements Shape {
    //长
    private double length;
    //宽
    private double width;

    public Rectangle() {
    }

    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    @Override
    public double area() {
        return length * width;
    }

    @Override
    public double length() {
        return (length + width) * 2;
    }
}

3. Triangle

package InterfaceTest;

/**
 * @ Author HuQi
 * @ Date 2020/2/2 15:42
 * @ Version 1.0
 * ---------------------------
 * 三角形
 */
public class Triangle implements Shape {

    private double sideOne;
    private double sideTwo;
    private double sideThree;

    public Triangle() {
    }

    public Triangle(double sideOne, double sideTwo, double sideThree) {
        this.sideOne = sideOne;
        this.sideTwo = sideTwo;
        this.sideThree = sideThree;
    }

    @Override
    public double area() {
        double p = length() / 2;
        return Math.sqrt(p * (p - sideOne) * (p - sideTwo) * (p - sideThree));
    }

    @Override
    public double length() {
        return sideOne + sideTwo + sideThree;
    }
}

4. Circle

package InterfaceTest;

/**
 * @ Author HuQi
 * @ Date 2020/2/2 15:48
 * @ Version 1.0
 * ---------------------------
 */
public class Circle implements Shape {

    private double radius;

    public Circle() {
    }

    public Circle(double radius) {
        this.radius = radius;
    }

    @Override
    public double area() {
        return Math.PI * radius * radius;
    }

    @Override
    public double length() {
        return 2 * Math.PI * radius;
    }
}

5. Test

package InterfaceTest;

/**
 * @ Author HuQi
 * @ Date 2020/2/2 15:29
 * @ Version 1.0
 * ---------------------------
 * 要求:可以计算多种图形的面积和周长
 * 圆形、三角形、矩形
 * 1.形成一个形状接口,提供两个抽象方法,(面积、周长)
 * 2.定义三个实现形状接口
 */
public class Test {
    public static void main(String[] args) {
        //矩形
        Rectangle rect = new Rectangle(12, 18);
        System.out.println("矩形面积:" + rect.area());
        System.out.println("矩形周长:" + rect.length());
        //三角形
        Triangle tri = new Triangle(10,20,30);
        System.out.println("三角形面积:" + tri.area());
        System.out.println("三角形周长:" + tri.length());
        //圆形
        Circle cir = new Circle(19);
        System.out.println("圆形面积:" + cir.area());
        System.out.println("圆形周长:" + cir.length());
    }
}

原文地址:https://www.cnblogs.com/hq82/p/12252524.html