学习Java的第五周
继承继承继承继承。
Ch5Demo1
- 设计一个三角形 类Ch5Demo1来扩展Geometricobject类。这个类包括:
(1)三个名为side1、side2、side3的double数据域表示这个三角形的三条边,它们默认值是1.0;
(2)一个无参构造方法创建默认的三角形;
(3)一个创建指定side1、side2、side3的三角形的构造方法;
(4)所有三个数据域的访问器方法;
(5)一个名为getArea()的方法返回这个三角形的面积;
(6)一个名为getPerimeter()方法返回这个三角形的周长;
(7)一个名为toString()的方法返回这个三角形的字符串描述;
编写一个测试程序,提示用户输入三角形的三条边、颜色以及一个Boolean值表明该三角形是否填充。程序应该使用输入创建一个具有这些边并设置color和filled属性的三角形。程序应该显示面积、边长、颜色以及表明是否填充的真或假的值。
GeometricObject代码如下:
public class GeometricObject {
private String color = "white";
private boolean filled;
private java.util.Date dateCreated;
public GeometricObject() {
dateCreated = new java.util.Date();
}
public GeometricObject(String color, boolean filled) {
dateCreated = new java.util.Date();
this.color = color;
this.filled = filled;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public boolean isFilled() {
return filled;
}
public void setFilled(boolean filled) {
this.filled = filled;
}
public java.util.Date getDateCreated() {
return dateCreated;
}
public String toString() {
return "created on " + dateCreated + "\ncolor: " + color
+ " and filled: " + filled;
}
}
题解如下:
算了,博主懒出新高度了,这题纯练手的简单题就不写题解了,有不明白的地方欢迎评论去留言。
水水水hhhhhhh…
Ch5Demo2
- 设计一个类Ch5Demo21(支票账户)和Ch5Demo22(储蓄账户)来扩展Ch3Demo5类(第三次作业第五题)。Ch5Demo21类包括:支票账户有一个透支限定额,但储蓄账户不能透支。创建Ch3Demo5、Ch5Demo21、Ch5Demo22的对象,然后调用它们的toString()方法。
支票账户
public class Ch5Demo21 extends Ch3Demo5{
double overdraft = 0.0;//初始透支额
boolean isoverdraft = false;//判断账户是否透支
public Ch5Demo21() {
}
public void setOverdraft(double overdraft) {
this.overdraft = overdraft;
}
public boolean isIsoverdraft() {
if (getBalance() < 0) {
isoverdraft = true;
}
return isoverdraft;
}
public void withDraw(double money) {
double mybalance = getBalance();
if (money >= mybalance) {
if (money > mybalance + overdraft) {
System.out.println("透支额不足!");
} else {
setBalance(mybalance - money);
}
} else {
setBalance(mybalance - money);
}
}
//test
public static void main(String[] args) {
Ch5Demo21 c=new Ch5Demo21();//创建一个透支帐户
c.setBalance(1000);//设置帐户余额1000
c.setOverdraft(500);//设置帐户可透支额是500
c.withDraw(800);//取钱800元
System.out.println(c.getBalance());
c.withDraw(300);
System.out.println(c.getBalance());
System.out.println(c.isIsoverdraft());
c.withDraw(500);
}
}
储蓄账户
public class Ch5Demo22 extends Ch3Demo5{
double interest;//利息
int term;
//设置存款期限
public void setTerm(int year){
term = year;
}
//计算利息
public void getinterest(){
interest = this.getBalance()*this.getAnnualInterestRate()*this.term;
this.setBalance(getBalance()+interest);
}
}
作者很短很短。。
Ch5Demo3
- 根据Ch3Demo5类(第三次作业第五题),设计出一个新的Ch5Demo3类:
(1)添加一个String类型的新据域name来存储客户的名字;
(2)添加一个新的构造方法,该方法创建一个具有指定名字、id和收支额的账户;
(3)添加一个名为transactions的ArrayList类型的新数据域,用于为账户存储交易。每笔交易都是一个Transaction类的实例。Transaction类结构如下:
-date java.util.Date
-type char (W为存款,D为取款)
-amount double
-balance double
-description String
+Transaction(type: char,amout:double,balance:double,description:String)
构造器和访问器
(4)修改withdraw和deposit方法,向transactions数组线性表添加一笔交易。
(5)其它所有属性和方法都和编程练习题Ch3Demo5类(第三次作业第五题)相同。
编写一个测试程序,创建一个年利率为1.5%,收支额为1000,id为1122而名字为George的Ch5Demo3类的账户,向该账户存入30美元、40美元和50美元并从该账户中取出5美元、4美元、2美元。打印出账户清单,显示账户持有者名字、利率、收支额、和所有的交易。
package ch5;
import java.sql.Date;
import java.util.ArrayList;
class Transaction{
Date date;
char type;
double amount;
double balance;
String description;
public Transaction(char type, double amount, double balance, String description) {
this.type = type;
this.amount = amount;
this.balance = balance;
this.description = description;
this.date = new Date(System.currentTimeMillis());
}
public char getType() {
return type;
}
public void setType(char type) {
this.type = type;
}
public double getamount() {
return amount;
}
public void setamount(double amount) {
this.amount = amount;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String toString() {
return "日期:"+date+"操作类型:"+type+"数量:"+amount+"余额:"+ balance+"操作员:"+ description+"\n";
}
}
public class Ch5Demo3 {
Transaction t;
String id = "000";
private String name;
private double balance = 0;
private double annualInterestRate = 0;
private Date dateCreated;
static ArrayList<Transaction> Transactions = new ArrayList<Transaction>();
//创建默认帐户的无参构造方法
public Ch5Demo3() {
dateCreated = new Date(System.currentTimeMillis());
}
//创建带特定id和初始余额的帐户的有参构造方法
public Ch5Demo3(String id, double balance) {
this.id = id;
this.balance = balance;
this.dateCreated = new Date(System.currentTimeMillis()); //创建账户的时间
}
//具有指定名字、id和收支额的账户的构造方法
public Ch5Demo3(String id, String name, double balance) {
this.id = id;
this.setName(name);
this.balance = balance;
this.dateCreated = new Date(System.currentTimeMillis());
}
// 访问器和修改器
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ArrayList<Transaction> getTransactions() {
return Transactions;
}
public void setTransactions(ArrayList<Transaction> transactions) {
Transactions = transactions;
}
// id的访问器
public String getId() {
return id;
}
// id的修改器
public void setId(String id) {
this.id = id;
}
// balance的访问器
public double getBalance() {
return balance;
}
// balance的修改器
public void setBalance(double balance) {
this.balance = balance;
}
// annualInterestRate的访问器
public double getAnnualInterestRate() {
return annualInterestRate;
}
// annualInterestRate的修改器
public void setAnnualInterestRate(double annualInterestRate) {
this.annualInterestRate = annualInterestRate;
}
// dateCreated的访问器
public Date getDateCreated() {
return dateCreated;
}
// 返回月利率的方法
public double getMonthlyInterestRate() {
return annualInterestRate / 12;
}
//取钱的方法
public void withDraw(double money1) {
if (balance >= money1) {
balance -= money1;
Transactions.add(new Transaction('D',money1,this.balance,"操作员一"));
} else {
System.out.println("余额不足!");
}
}
//存钱的方法
public void deposit(double money2) {
balance += money2;
Transactions.add(new Transaction('W',money2,this.balance,"操作员二"));
}
//test
public static void main(String[] args) {
Ch5Demo3 a = new Ch5Demo3("001","堃神",100000001);
a.deposit(1000);
a.withDraw(500);
System.out.println(a.getName());
System.out.println(a.getBalance());
/*1.必须要先进行Transactions.add()操作才能打印输出!!
*2.先将ArrayList声明语句设置成static.
*否则
*报错报错报错
*/
System.out.println(Transactions);
}
}
这一题,又要重写toString()函数,而且,因为题目冗长和这个ArrayList的原因,这道题花了我
三!个!小!时!
我废了!!——来自弱鸡的无病呻吟。
Ch5Demo4
(1)根据上图设计三个类Person、Student、Employee类,图中箭头为继承关系。
(2)设计一个测试类Test类,采用多态的工作原理分别输出“学生的工作是帮助老师参与学校的学生管理工作,提高综合素质”和输出“雇员工作是为了养活自己和家人”。
Person类
package ch5;
public abstract class Person {
private String name;
private int age;
private String address;
private String phone;
public Person() {
}
public Person(String name, int age, String address, String phone) {
this.name = name;
this.age = age;
this.address = address;
this.phone = phone;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void work(){
System.out.println("人类需要工作来体现人生价值");
}
public abstract void study();
}
Student类
package ch5;
public class Student extends Person{
private String school;
public Student(String name, int age, String address, String phone) {
super(name, age, address, phone);
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public void work(){
System.out.println("学生的工作是帮助老师参加学校的学生管理工作,提高综合素质");
}
public void study(){
System.out.println("全日制在宜春学院学习");
}
}
Employee类
package ch5;
public class Employee extends Person{
String office;
public Employee(String name, int age, String address, String phone) {
super(name, age, address, phone);
}
public String getOffice() {
return office;
}
public void setOffice(String office) {
this.office = office;
}
public void work(){
System.out.println("雇员工作是为了养活自己和家人");
}
public void study(){
System.out.println("在职学习也能学到知识");
}
}
test4
package ch5;
public class test4{
public static void main(String[] args) {
Person A = new Student("张三", 18, "江西省南昌", "13870589160");// 父类的引用指向子类的对象,实现多态
Person B = new Employee("李四", 30, "江西省九江", "12345678910");// 父类的引用指向子类的对象,实现多态
A.work();
B.work();
}
}
呵呵,,呵呵。
Ch5Demo5
5.设计一个扩展自抽象类GeometricObject 1的新类Ch5Demo5(圆),编写一个测试程序,提示输入圆的半径、颜色、一个是否填充的布尔值,程序根据输入信息创建一个圆的对象,程序显示面积、周长、颜色、是否被填充。GeometricObject 1代码如下:
package ch5;
import java.util.Date;
public abstract class GeometricObject1 {
private String color = "white";
private boolean filled;
private Date dateCreated;
protected GeometricObject1() {
dateCreated = new Date();
}
protected GeometricObject1(String color, boolean filled) {
dateCreated = new Date();
this.color = color;
this.filled = filled;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public boolean isFilled() {
return filled;
}
public void setFilled(boolean filled) {
this.filled = filled;
}
public java.util.Date getDateCreated() {
return dateCreated;
}
public String toString() {
return "created on " + dateCreated + "\ncolor: " + color +
" and filled: " + filled;
}
/** Abstract method getArea */
public abstract double getArea();
/** Abstract method getPerimeter */
public abstract double getPerimeter();
}
题解:
package ch5;
public class Ch5Demo5 extends GeometricObject1{
private double radius;
@Override
public double getArea() {
// TODO Auto-generated method stub
return Math.PI*radius*radius;
}
@Override
public double getPerimeter() {
// TODO Auto-generated method stub
return 2*Math.PI*radius;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
}
垃圾题。
总结
额,,,这周,大概除了Ch5Demo3都是水题吧,Demo4是Java的多态,其他的都是继承继承继承,比较简单。