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

抽象类
- package task.task;
-
- public abstract class Graphical {
- public abstract void area();//面积
- public abstract void perimeter();//周长
- public abstract void describe();//对图形的描述
- }
圆形类
- package task.task;
-
- /**
- * 圆形
- */
- public class Circular extends Graphical {
-
- public static final double Π = 3.14;
-
- public int r;//半径
- public String name;//形状
- public double area;//面积
- public double perimeter;//周长
-
- public Circular(int r, String name) {
- this.r = r;
- this.name = name;
- }
-
- @Override
- public void area() {
- this.area = Π*r*r;
- System.out.println("半径为" + r + "的圆的面积为" + area);
- }
-
- @Override
- public void perimeter() {
- this.perimeter = Π*(2 * r);
- System.out.println("半径为" + r + "的圆的周长为" + perimeter);
- }
-
- @Override
- public void describe() {
- System.out.println("这是" + name + "形状,"+ "周长是" + area + ",面积是" + perimeter);
- }
-
- /**
- * 测试方法
- */
- public static void main(String[] args) {
- Circular c = new Circular(4,"圆形");
- c.area();
- c.perimeter();
- c.describe();
- }
- }

长方形类
- package tsak1;
-
- /**
- * 长方形类
- */
- public class Rectangle extends Graphical {
-
- public String name = "长方形";
- public int length;//长
- public int wide;//宽
- public int area;//面积
- public int perimeter;//周长
-
- public Rectangle(int length, int wide) {
- this.length = length;
- this.wide = wide;
- }
-
- @Override
- public void area() {
- this.area = length * wide;
- System.out.println("长为" + length + "宽为" + wide + "的长方形的面积为" + area);
- }
-
- @Override
- public void perimeter() {
- this.perimeter = (length + wide) * 2;
- System.out.println("长为" + length + "宽为" + wide + "的长方形的周长为" + perimeter);
- }
-
- @Override
- public void describe() {
- System.out.println("这是" + name + "形状,"+ "周长是" + perimeter + ",面积是" + area);
- }
-
- public static void main(String[] args) {
- Rectangle r = new Rectangle(5,2);
- r.area();
- r.perimeter();
- r.describe();
- }
- }

等边三角形类
- package tsak1;
-
- /**
- * 等边三角形类
- */
- public class Triangle extends Graphical {
-
- public static final double SIN60 = 0.87;//取sin60°的近似值
- public String name = "等边三角形";
- public int sideLength;//边长
- public int perimeter;//周长
- public double area;//面积
-
- public Triangle(int sideLength) {
- this.sideLength = sideLength;
- }
-
- @Override
- public void area() {
- area = 0.5 * sideLength * sideLength * SIN60;
- System.out.println("边长为" + sideLength + "的等边三角形形的面积为" + area);
- }
-
- @Override
- public void perimeter() {
- perimeter = 3 * sideLength;
- System.out.println("边长为" + sideLength + "的等边三角形形的周长为" + perimeter);
- }
-
- @Override
- public void describe() {
- System.out.println("这是" + name + "形状,"+ "周长是" + perimeter + ",面积是" + area);
- }
-
- public static void main(String[] args) {
- Triangle t = new Triangle(2);
- t.area();
- t.perimeter();
- t.describe();
- }
- }

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

抽象接口
- package task2;
-
- /**
- * 接口类
- */
- public interface SumCount {
- public static final int RANGE = 100;//直接在接口中初始化要求的范围
- public abstract void sumAndCount();
- }
偶数类
- package task2;
-
- /**
- * 偶数类
- */
- public class EvenNum implements SumCount {
- private int evenCount;//偶数个数
- private int evenSum;//偶数和
-
- @Override
- public void sumAndCount() {
- for (int i = 1; i <= RANGE; i++) {
- if(i % 2 == 0) {
- evenCount++;
- evenSum += i;
- }
- }
- System.out.println("100以内的偶数的和为" + evenSum + ",100以内的偶数个数为" + evenCount);
- }
- }
奇数类
- package task2;
-
- /**
- * 奇数类
- */
- public class OddNum implements SumCount {
- private int oddCount = 0;//奇数个数
- private int oddSum = 0;//奇数和
-
- @Override
- public void sumAndCount() {
- for (int i = 1; i <= RANGE; i++) {
- if(i % 2 != 0) {
- oddCount++;
- oddSum += i;
- }
- }
- System.out.println("100以内的奇数的和为" + oddSum + ",100以内的奇数个数为" + oddCount);
- }
- }
测试类
- package task2;
-
- public class Test {
- public static void main(String[] args) {
- //初始化偶数类,调用偶数类求和求个数
- EvenNum e = new EvenNum();
- e.sumAndCount();
- //初始化奇数类,调用奇数类求和求个数
- OddNum o = new OddNum();
- o.sumAndCount();
- }
- }

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

抽象动物类
为其设置姓名和年龄两个共有属性
- package task1.abstractcalss;
-
- public abstract class Animal {
- public String name;
- public int age;
- }
接口
· 进食接口
- package task1.myinterface;
-
- /**
- * 进食接口
- */
- public interface IEating {
- void eat();
- }
· 飞行接口
- package task1.myinterface;
-
- /**
- * 飞行接口
- */
- public interface IFlying {
- void fly();
- }
· 睡觉接口
- package task1.myinterface;
-
- /**
- * 睡觉接口
- */
- public interface ISleeping {
- void sleep();
- }
· 讲话接口
- package task1.myinterface;
-
- /**
- * 讲话接口
- */
- public interface ISpeaking {
- void speak();
- }
· 游泳接口
- package task1.myinterface;
-
- /**
- * 游泳接口
- */
- public interface ISwimming {
- void swim();
- }
· 思考接口
- package task1.myinterface;
-
- /**
- * 思考接口
- */
- public interface IThinking {
- void think();
- }
· 行走接口
- package task1.myinterface;
-
- /**
- * 行走接口
- */
- public interface IWalking {
- void walk();
- }
实现类
· Bird类
- package task1.inheritance;
-
- import task1.abstractcalss.Animal;
- import task1.myinterface.*;
-
- public class Bird extends Animal implements IEating, IFlying, ISleeping, ISpeaking {
-
- public Bird(String name, int age) {
- super.age = age;
- super.name = name;
- }
-
- @Override
- public void printfInfo() {
- System.out.println("这是" + super.name + ",年龄为" + super.age + "岁");
- }
-
- @Override
- public void eat() {
- System.out.println(super.name + "正在吃饭");
- }
-
- @Override
- public void fly() {
- System.out.println(super.name + "正在飞行");
- }
-
- @Override
- public void sleep() {
- System.out.println(super.name + "正在睡觉");
- }
-
- @Override
- public void speak() {
- System.out.println(super.name + "吱吱吱");
- }
-
- public static void main(String[] args) {
- Bird bird = new Bird("布谷鸟", 4);
- bird.printfInfo();
- bird.eat();
- bird.fly();
- bird.sleep();
- bird.speak();
- }
- }

· Cat类
- package task1.inheritance;
-
- import task1.abstractcalss.Animal;
- import task1.myinterface.*;
-
- public class Cat extends Animal implements IEating, ISleeping, ISpeaking, IWalking {
-
- public Cat(String name, int age) {
- super.age = age;
- super.name = name;
- }
-
- @Override
- public void printfInfo() {
- System.out.println("这是" + super.name + ",年龄为" + super.age + "岁");
- }
-
- @Override
- public void eat() {
- System.out.println(super.name + "正在吃饭");
- }
-
- @Override
- public void sleep() {
- System.out.println(super.name + "正在睡觉");
- }
-
- @Override
- public void speak() {
- System.out.println(super.name + "喵喵喵");
- }
-
- @Override
- public void walk() {
- System.out.println(super.name + "在跑步");
- }
-
- public static void main(String[] args) {
- Cat cat = new Cat("波斯猫", 3);
- cat.printfInfo();
- cat.eat();
- cat.sleep();
- cat.walk();
- cat.speak();
- }
-
- }

· Fish类
- package task1.inheritance;
-
- import task1.abstractcalss.Animal;
- import task1.myinterface.*;
-
- public class Fish extends Animal implements IEating, ISleeping, ISwimming {
-
- public Fish(String name, int age) {
- super.age = age;
- super.name = name;
- }
- @Override
- public void printfInfo() {
- System.out.println("这是" + super.name + ",年龄为" + super.age + "岁");
- }
-
- @Override
- public void eat() {
- System.out.println(super.name + "正在吃饭");
- }
-
- @Override
- public void sleep() {
- System.out.println(super.name + "正在睡觉");
- }
-
- @Override
- public void swim() {
- System.out.println(super.name + "正在游泳");
- }
-
- public static void main(String[] args) {
- Bird bird = new Bird("鲤鱼", 4);
- bird.printfInfo();
- bird.speak();
- bird.sleep();
- bird.eat();
- }
- }

· Person类
- package task1.inheritance;
-
- import task1.abstractcalss.Animal;
- import task1.myinterface.*;
-
- public class Person extends Animal implements IEating, ISpeaking, ISleeping, IThinking, IWalking,ISwimming {
-
- public Person(String name, int age) {
- super.name = name;
- super.age = age;
- }
-
- @Override
- public void printfInfo() {
- System.out.println("这是" + super.name + ",年龄为" + super.age + "岁");
- }
-
- @Override
- public void eat() {
- System.out.println(super.name + "正在吃饭");
- }
-
- @Override
- public void sleep() {
- System.out.println(super.name + "正在睡觉");
- }
-
- @Override
- public void speak() {
- System.out.println(super.name + "说我爱学Java");
- }
-
- @Override
- public void swim() {
- System.out.println(super.name + "在游泳");
- }
-
- @Override
- public void think() {
- System.out.println(super.name + "在思考");
- }
-
- @Override
- public void walk() {
- System.out.println(super.name + "在跑步");
- }
-
- public static void main(String[] args) {
- Person person = new Person("张三", 18);
- person.printfInfo();
- person.eat();
- person.sleep();
- person.speak();
- person.swim();
- person.think();
- person.walk();
- }
- }

编写一个类,实现银行账户,并完成程序的测试:
· 设置的属性有“账号”、 “储户姓名”、“地址”以及“存款余额”;
· 设置的方法有“存款”、“取款”、“查询”、“计算利息”、“累加利息”;
· 给类增加一个静态属性“最小余额”和一个用来修改这个最小余额属性的方法;
· 给类增加一个静态属性“活期利息”和封装这个数据的对应方法;
①设置的属性有“账号”、 “储户姓名”、“地址”以及“存款余额”
根据实验要求,定义出三个变量账号、姓名、地址、存款余额,定义为public共有属性,账号也定义为String类型变量.

②定义活期利率
public static final double RATE = 0.0035;//定义活期利率
③ 设置的方法有“存款”、“取款”、“查询”、“计算利息”、“累加利息”
首先定义出四个方法,①存款的实现即传入要存的金额,直接用当前余额加上存入余额即可; ②取款的实现即传入要取的金额,用当前余额减去取款金额即可;③计算利息为活期利率,根据存入的时间来计算利率;④累加利息,假如当前存入了一年,一年结束后又存了一年,则根据第一年结束后的余额来计算第二年的利息,再累加两年的利息.
④给类增加一个静态属性“最小余额”和一个用来修改这个最小余额属性的方法
增加了最小余额后,在取出金额的时候利用最小余额对其进行约束:如果取出后余额小于最小余额则不允许取出

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

完整代码
- package task2;
-
- public class Account {
-
- public static final double RATE = 0.0035;//定义活期利率
-
- public String username;//账号
- public String name;//储户姓名
- public String address;//地址
- public double money;//存款
- public double interest;//利息
- public double allInterest;//累加利息
-
- public Account(String username, String name, String address, double money) {
- this.username = username;
- this.name = name;
- this.address = address;
- this.money = money;
- }
-
- private static double minimumBalance = 2000;//最小余额
- private static double currentInterest;//活期利息
-
- //获得封装的最小余额数据
- public double getMinimumBalance() {
- return minimumBalance;
- }
- //修改封装的最小余额数据
- public void setMinimumBalance(double minimumBalance) {
- Account.minimumBalance = minimumBalance;
- }
- //获得封装的活期利息
- public double getCurrentInterest() {
- return currentInterest;
- }
- //修改封装的活期利息
- public void setCurrentInterest(double currentInterest) {
- Account.currentInterest = currentInterest;
- }
-
- //存款
- public void deposit(double money) {
- this.money += money;
- System.out.println("成功存入" + money + "rmb,当前余额为: " + this.money + "rmb");
- }
- //取款
- public void withdraw(double money) {
- if((this.money-money) < minimumBalance) {
- System.out.println("取出后余额小于最小余额" + minimumBalance + "rmb,取款失败");
- }else {
- this.money -= money;
- System.out.println("成功取出" + money + "rmb,当前余额为: " + this.money + "rmb");
- }
- }
- //计算利息
- public void calculateInterest(int year) {
- this.interest = money * year * RATE;
- //计算完利息后加入余额
- this.money += interest;
- System.out.println("当前余额为: " + this.money + "rmb,存入" + year + "年可以获得利息: " + this.interest + "rmb");
- }
- //累加利息
- public void accumulatedInterest() {
- this.allInterest += interest;
- System.out.println("目前累加利息为: " + this.allInterest + "rmb");
- }
-
- }
测试代码
- package task2;
-
- public class TestAccount {
- public static void main(String[] args) {
- Account account = new Account("62456", "张三", "陕西西安", 4000);//需要保证初始余额大于最小余额
- //模拟存款
- account.deposit(100000);
- //模拟取款
- account.withdraw(4000);
- //计算利息(存入五年)
- account.calculateInterest(5);
- account.accumulatedInterest();
- //再次计算利息,存入三年
- account.calculateInterest(3);
- account.accumulatedInterest();
-
- //测试活期利息
- //获得当前活期利息
- System.out.println("当前活期利息为: " + account.getCurrentInterest() + "rmb");
- //修改当前活期利息
- account.setCurrentInterest(6000);
- //显示当前活期利息
- System.out.println("当前活期利息为: " + account.getCurrentInterest() + "rmb");
- }
- }
