• Java实验三:面向对象(二)


    目录

    1.设计一个抽象类图形类 

    2.定义一个抽象接口,该接口用于求和与统计数量 

    3.定义一个抽象类动物类,同时定义其行为的抽象接口

    4.编写一个类,实现银行账户


    1.设计一个抽象类图形类 

    设计一个抽象类图形类,在该类中包含有至少三个抽象方法,分别用于求周长、求面积,以及对图形进行描述(如,“这是**形状,周长是**,面积是**”),分别定义圆形类、长方形类、等边三角形类来继承图形类,实现上述三个方法,并创建实例验证

    抽象类

    1. package task.task;
    2. public abstract class Graphical {
    3. public abstract void area();//面积
    4. public abstract void perimeter();//周长
    5. public abstract void describe();//对图形的描述
    6. }

    圆形类 

    1. package task.task;
    2. /**
    3. * 圆形
    4. */
    5. public class Circular extends Graphical {
    6. public static final double Π = 3.14;
    7. public int r;//半径
    8. public String name;//形状
    9. public double area;//面积
    10. public double perimeter;//周长
    11. public Circular(int r, String name) {
    12. this.r = r;
    13. this.name = name;
    14. }
    15. @Override
    16. public void area() {
    17. this.area = Π*r*r;
    18. System.out.println("半径为" + r + "的圆的面积为" + area);
    19. }
    20. @Override
    21. public void perimeter() {
    22. this.perimeter = Π*(2 * r);
    23. System.out.println("半径为" + r + "的圆的周长为" + perimeter);
    24. }
    25. @Override
    26. public void describe() {
    27. System.out.println("这是" + name + "形状,"+ "周长是" + area + ",面积是" + perimeter);
    28. }
    29. /**
    30. * 测试方法
    31. */
    32. public static void main(String[] args) {
    33. Circular c = new Circular(4,"圆形");
    34. c.area();
    35. c.perimeter();
    36. c.describe();
    37. }
    38. }

     

    长方形类 

    1. package tsak1;
    2. /**
    3. * 长方形类
    4. */
    5. public class Rectangle extends Graphical {
    6. public String name = "长方形";
    7. public int length;//长
    8. public int wide;//宽
    9. public int area;//面积
    10. public int perimeter;//周长
    11. public Rectangle(int length, int wide) {
    12. this.length = length;
    13. this.wide = wide;
    14. }
    15. @Override
    16. public void area() {
    17. this.area = length * wide;
    18. System.out.println("长为" + length + "宽为" + wide + "的长方形的面积为" + area);
    19. }
    20. @Override
    21. public void perimeter() {
    22. this.perimeter = (length + wide) * 2;
    23. System.out.println("长为" + length + "宽为" + wide + "的长方形的周长为" + perimeter);
    24. }
    25. @Override
    26. public void describe() {
    27. System.out.println("这是" + name + "形状,"+ "周长是" + perimeter + ",面积是" + area);
    28. }
    29. public static void main(String[] args) {
    30. Rectangle r = new Rectangle(5,2);
    31. r.area();
    32. r.perimeter();
    33. r.describe();
    34. }
    35. }

    等边三角形类 

    1. package tsak1;
    2. /**
    3. * 等边三角形类
    4. */
    5. public class Triangle extends Graphical {
    6. public static final double SIN60 = 0.87;//取sin60°的近似值
    7. public String name = "等边三角形";
    8. public int sideLength;//边长
    9. public int perimeter;//周长
    10. public double area;//面积
    11. public Triangle(int sideLength) {
    12. this.sideLength = sideLength;
    13. }
    14. @Override
    15. public void area() {
    16. area = 0.5 * sideLength * sideLength * SIN60;
    17. System.out.println("边长为" + sideLength + "的等边三角形形的面积为" + area);
    18. }
    19. @Override
    20. public void perimeter() {
    21. perimeter = 3 * sideLength;
    22. System.out.println("边长为" + sideLength + "的等边三角形形的周长为" + perimeter);
    23. }
    24. @Override
    25. public void describe() {
    26. System.out.println("这是" + name + "形状,"+ "周长是" + perimeter + ",面积是" + area);
    27. }
    28. public static void main(String[] args) {
    29. Triangle t = new Triangle(2);
    30. t.area();
    31. t.perimeter();
    32. t.describe();
    33. }
    34. }

    2.定义一个抽象接口,该接口用于求和与统计数量 

    定义一个抽象接口,该接口用于求和与统计数量。定义两个奇数类与偶数类实现上述接口,分别可以求100以内的奇数的和,统计100以内的奇数个数,以及求100以内的偶数的和,统计100以内的偶数个数。

    抽象接口

    1. package task2;
    2. /**
    3. * 接口类
    4. */
    5. public interface SumCount {
    6. public static final int RANGE = 100;//直接在接口中初始化要求的范围
    7. public abstract void sumAndCount();
    8. }

    偶数类 

    1. package task2;
    2. /**
    3. * 偶数类
    4. */
    5. public class EvenNum implements SumCount {
    6. private int evenCount;//偶数个数
    7. private int evenSum;//偶数和
    8. @Override
    9. public void sumAndCount() {
    10. for (int i = 1; i <= RANGE; i++) {
    11. if(i % 2 == 0) {
    12. evenCount++;
    13. evenSum += i;
    14. }
    15. }
    16. System.out.println("100以内的偶数的和为" + evenSum + ",100以内的偶数个数为" + evenCount);
    17. }
    18. }

    奇数类 

    1. package task2;
    2. /**
    3. * 奇数类
    4. */
    5. public class OddNum implements SumCount {
    6. private int oddCount = 0;//奇数个数
    7. private int oddSum = 0;//奇数和
    8. @Override
    9. public void sumAndCount() {
    10. for (int i = 1; i <= RANGE; i++) {
    11. if(i % 2 != 0) {
    12. oddCount++;
    13. oddSum += i;
    14. }
    15. }
    16. System.out.println("100以内的奇数的和为" + oddSum + ",100以内的奇数个数为" + oddCount);
    17. }
    18. }

    测试类 

    1. package task2;
    2. public class Test {
    3. public static void main(String[] args) {
    4. //初始化偶数类,调用偶数类求和求个数
    5. EvenNum e = new EvenNum();
    6. e.sumAndCount();
    7. //初始化奇数类,调用奇数类求和求个数
    8. OddNum o = new OddNum();
    9. o.sumAndCount();
    10. }
    11. }

    3.定义一个抽象类动物类,同时定义其行为的抽象接口

    定义一个抽象类动物类,同时定义抽象接口:进食接口、睡觉接口、思考接口、说话接口、行走接口、游泳接口、飞翔的接口。分别定义猫类、人类、鸟类、鱼类继承动物类,同时,根据实际情况,选择性实现上述接口,并创建实例验证

    文件布局 

    抽象动物类

    为其设置姓名和年龄两个共有属性

    1. package task1.abstractcalss;
    2. public abstract class Animal {
    3. public String name;
    4. public int age;
    5. }

    接口 

    · 进食接口

    1. package task1.myinterface;
    2. /**
    3. * 进食接口
    4. */
    5. public interface IEating {
    6. void eat();
    7. }

    · 飞行接口 

    1. package task1.myinterface;
    2. /**
    3. * 飞行接口
    4. */
    5. public interface IFlying {
    6. void fly();
    7. }

    · 睡觉接口 

    1. package task1.myinterface;
    2. /**
    3. * 睡觉接口
    4. */
    5. public interface ISleeping {
    6. void sleep();
    7. }

    · 讲话接口 

    1. package task1.myinterface;
    2. /**
    3. * 讲话接口
    4. */
    5. public interface ISpeaking {
    6. void speak();
    7. }

    · 游泳接口 

    1. package task1.myinterface;
    2. /**
    3. * 游泳接口
    4. */
    5. public interface ISwimming {
    6. void swim();
    7. }

    · 思考接口 

    1. package task1.myinterface;
    2. /**
    3. * 思考接口
    4. */
    5. public interface IThinking {
    6. void think();
    7. }

    · 行走接口 

    1. package task1.myinterface;
    2. /**
    3. * 行走接口
    4. */
    5. public interface IWalking {
    6. void walk();
    7. }

    实现类 

    · Bird类 

    1. package task1.inheritance;
    2. import task1.abstractcalss.Animal;
    3. import task1.myinterface.*;
    4. public class Bird extends Animal implements IEating, IFlying, ISleeping, ISpeaking {
    5. public Bird(String name, int age) {
    6. super.age = age;
    7. super.name = name;
    8. }
    9. @Override
    10. public void printfInfo() {
    11. System.out.println("这是" + super.name + ",年龄为" + super.age + "岁");
    12. }
    13. @Override
    14. public void eat() {
    15. System.out.println(super.name + "正在吃饭");
    16. }
    17. @Override
    18. public void fly() {
    19. System.out.println(super.name + "正在飞行");
    20. }
    21. @Override
    22. public void sleep() {
    23. System.out.println(super.name + "正在睡觉");
    24. }
    25. @Override
    26. public void speak() {
    27. System.out.println(super.name + "吱吱吱");
    28. }
    29. public static void main(String[] args) {
    30. Bird bird = new Bird("布谷鸟", 4);
    31. bird.printfInfo();
    32. bird.eat();
    33. bird.fly();
    34. bird.sleep();
    35. bird.speak();
    36. }
    37. }

    · Cat类 

    1. package task1.inheritance;
    2. import task1.abstractcalss.Animal;
    3. import task1.myinterface.*;
    4. public class Cat extends Animal implements IEating, ISleeping, ISpeaking, IWalking {
    5. public Cat(String name, int age) {
    6. super.age = age;
    7. super.name = name;
    8. }
    9. @Override
    10. public void printfInfo() {
    11. System.out.println("这是" + super.name + ",年龄为" + super.age + "岁");
    12. }
    13. @Override
    14. public void eat() {
    15. System.out.println(super.name + "正在吃饭");
    16. }
    17. @Override
    18. public void sleep() {
    19. System.out.println(super.name + "正在睡觉");
    20. }
    21. @Override
    22. public void speak() {
    23. System.out.println(super.name + "喵喵喵");
    24. }
    25. @Override
    26. public void walk() {
    27. System.out.println(super.name + "在跑步");
    28. }
    29. public static void main(String[] args) {
    30. Cat cat = new Cat("波斯猫", 3);
    31. cat.printfInfo();
    32. cat.eat();
    33. cat.sleep();
    34. cat.walk();
    35. cat.speak();
    36. }
    37. }

    · Fish类 

    1. package task1.inheritance;
    2. import task1.abstractcalss.Animal;
    3. import task1.myinterface.*;
    4. public class Fish extends Animal implements IEating, ISleeping, ISwimming {
    5. public Fish(String name, int age) {
    6. super.age = age;
    7. super.name = name;
    8. }
    9. @Override
    10. public void printfInfo() {
    11. System.out.println("这是" + super.name + ",年龄为" + super.age + "岁");
    12. }
    13. @Override
    14. public void eat() {
    15. System.out.println(super.name + "正在吃饭");
    16. }
    17. @Override
    18. public void sleep() {
    19. System.out.println(super.name + "正在睡觉");
    20. }
    21. @Override
    22. public void swim() {
    23. System.out.println(super.name + "正在游泳");
    24. }
    25. public static void main(String[] args) {
    26. Bird bird = new Bird("鲤鱼", 4);
    27. bird.printfInfo();
    28. bird.speak();
    29. bird.sleep();
    30. bird.eat();
    31. }
    32. }

    · Person类 

    1. package task1.inheritance;
    2. import task1.abstractcalss.Animal;
    3. import task1.myinterface.*;
    4. public class Person extends Animal implements IEating, ISpeaking, ISleeping, IThinking, IWalking,ISwimming {
    5. public Person(String name, int age) {
    6. super.name = name;
    7. super.age = age;
    8. }
    9. @Override
    10. public void printfInfo() {
    11. System.out.println("这是" + super.name + ",年龄为" + super.age + "岁");
    12. }
    13. @Override
    14. public void eat() {
    15. System.out.println(super.name + "正在吃饭");
    16. }
    17. @Override
    18. public void sleep() {
    19. System.out.println(super.name + "正在睡觉");
    20. }
    21. @Override
    22. public void speak() {
    23. System.out.println(super.name + "说我爱学Java");
    24. }
    25. @Override
    26. public void swim() {
    27. System.out.println(super.name + "在游泳");
    28. }
    29. @Override
    30. public void think() {
    31. System.out.println(super.name + "在思考");
    32. }
    33. @Override
    34. public void walk() {
    35. System.out.println(super.name + "在跑步");
    36. }
    37. public static void main(String[] args) {
    38. Person person = new Person("张三", 18);
    39. person.printfInfo();
    40. person.eat();
    41. person.sleep();
    42. person.speak();
    43. person.swim();
    44. person.think();
    45. person.walk();
    46. }
    47. }

     

    4.编写一个类,实现银行账户

    编写一个类,实现银行账户,并完成程序的测试:

    · 设置的属性有“账号”、 “储户姓名”、“地址”以及“存款余额”;

    · 设置的方法有“存款”、“取款”、“查询”、“计算利息”、“累加利息”;

    · 给类增加一个静态属性“最小余额”和一个用来修改这个最小余额属性的方法;

    · 给类增加一个静态属性“活期利息”和封装这个数据的对应方法;

    ①设置的属性有“账号”、 “储户姓名”、“地址”以及“存款余额”

    根据实验要求,定义出三个变量账号、姓名、地址、存款余额,定义为public共有属性,账号也定义为String类型变量.

    ②定义活期利率

    public static final double RATE = 0.0035;//定义活期利率

    ③ 设置的方法有“存款”、“取款”、“查询”、“计算利息”、“累加利息”

      

    首先定义出四个方法,①存款的实现即传入要存的金额,直接用当前余额加上存入余额即可; ②取款的实现即传入要取的金额,用当前余额减去取款金额即可;③计算利息为活期利率,根据存入的时间来计算利率;④累加利息,假如当前存入了一年,一年结束后又存了一年,则根据第一年结束后的余额来计算第二年的利息,再累加两年的利息.

    ④给类增加一个静态属性“最小余额”和一个用来修改这个最小余额属性的方法

    增加了最小余额后,在取出金额的时候利用最小余额对其进行约束:如果取出后余额小于最小余额则不允许取出 

     ⑤给类增加一个静态属性“活期利息”和封装这个数据的对应方法

    完整代码 

    1. package task2;
    2. public class Account {
    3. public static final double RATE = 0.0035;//定义活期利率
    4. public String username;//账号
    5. public String name;//储户姓名
    6. public String address;//地址
    7. public double money;//存款
    8. public double interest;//利息
    9. public double allInterest;//累加利息
    10. public Account(String username, String name, String address, double money) {
    11. this.username = username;
    12. this.name = name;
    13. this.address = address;
    14. this.money = money;
    15. }
    16. private static double minimumBalance = 2000;//最小余额
    17. private static double currentInterest;//活期利息
    18. //获得封装的最小余额数据
    19. public double getMinimumBalance() {
    20. return minimumBalance;
    21. }
    22. //修改封装的最小余额数据
    23. public void setMinimumBalance(double minimumBalance) {
    24. Account.minimumBalance = minimumBalance;
    25. }
    26. //获得封装的活期利息
    27. public double getCurrentInterest() {
    28. return currentInterest;
    29. }
    30. //修改封装的活期利息
    31. public void setCurrentInterest(double currentInterest) {
    32. Account.currentInterest = currentInterest;
    33. }
    34. //存款
    35. public void deposit(double money) {
    36. this.money += money;
    37. System.out.println("成功存入" + money + "rmb,当前余额为: " + this.money + "rmb");
    38. }
    39. //取款
    40. public void withdraw(double money) {
    41. if((this.money-money) < minimumBalance) {
    42. System.out.println("取出后余额小于最小余额" + minimumBalance + "rmb,取款失败");
    43. }else {
    44. this.money -= money;
    45. System.out.println("成功取出" + money + "rmb,当前余额为: " + this.money + "rmb");
    46. }
    47. }
    48. //计算利息
    49. public void calculateInterest(int year) {
    50. this.interest = money * year * RATE;
    51. //计算完利息后加入余额
    52. this.money += interest;
    53. System.out.println("当前余额为: " + this.money + "rmb,存入" + year + "年可以获得利息: " + this.interest + "rmb");
    54. }
    55. //累加利息
    56. public void accumulatedInterest() {
    57. this.allInterest += interest;
    58. System.out.println("目前累加利息为: " + this.allInterest + "rmb");
    59. }
    60. }

    测试代码 

    1. package task2;
    2. public class TestAccount {
    3. public static void main(String[] args) {
    4. Account account = new Account("62456", "张三", "陕西西安", 4000);//需要保证初始余额大于最小余额
    5. //模拟存款
    6. account.deposit(100000);
    7. //模拟取款
    8. account.withdraw(4000);
    9. //计算利息(存入五年)
    10. account.calculateInterest(5);
    11. account.accumulatedInterest();
    12. //再次计算利息,存入三年
    13. account.calculateInterest(3);
    14. account.accumulatedInterest();
    15. //测试活期利息
    16. //获得当前活期利息
    17. System.out.println("当前活期利息为: " + account.getCurrentInterest() + "rmb");
    18. //修改当前活期利息
    19. account.setCurrentInterest(6000);
    20. //显示当前活期利息
    21. System.out.println("当前活期利息为: " + account.getCurrentInterest() + "rmb");
    22. }
    23. }

     

  • 相关阅读:
    银行ATM系统
    【C++】二叉搜索树
    第5章 插叙:进程API
    采用一种估值方法,自动化评估某个股票价格合理性
    Java并发(一)----进程、线程、并行、并发
    这几个音乐伴奏提取的方法快码住了
    java培训之SpringMVC提示消息的国际化
    LoveCount统计“爱”——Scala-Spark实战应用案例
    Java集合大总结——Iterator(迭代器)接口
    C++ 语法基础课 习题4 —— 数组
  • 原文地址:https://blog.csdn.net/qq_58284486/article/details/125438706