1. 簡單多態問題 問題描述 編程實現下圖的類圖,並編寫一段程序來測試。
(1)可自行添加其他的成員變量和成員方法
(2) 各個子類的introduceSelf方法打印出子類的類名。
(3)本題的重點是測試程序的編寫,需要測試各種情形,如單個對象、數組化(即定義一個數組,包含不同子類的對象)和參數化(定義一個函數,它的實參可以是不同子類的對象)
注: 編寫測試類 Test,針對單個對象(Person),數組化(Person[])分別調用 introduceSelf()函數。
import java.util.Scanner;
class Person{
String name;
String job;
public Person(){System.out.println("Please Enter Your Name:");}
void GetSelf(String s1){}
void introduceSelf(){System.out.println("My name is "+name+" and my job is "+job);}
}
class Student extends Person{
void GetSelf(String s1){name = s1; job = "Student";}
}
class Employee extends Person{
void GetSelf(String s1){name = s1; job = "Employee";}
}
class Retired extends Person{
void GetSelf(String s1){name = s1; job = "Retired";}
}
public class PersonTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Please Enter The Number Of People:");
String s;
int num = 0;
num = in.nextInt();
int cho=0;
Person[] pr = new Person[num];
for (int i = 0; i < num; i++) {
System.out.println("Please choose the number to record the message");
System.out.println("1.Student 2.Employee 3.Retired ");
cho = in.nextInt();
switch (cho) {
case 1:
pr[i]= new Student();
s = in.next();
pr[i].GetSelf(s);
break;
case 2:
pr[i] = new Employee();
s = in.next();
pr[i].GetSelf(s);
break;
case 3:
pr[i] = new Retired();
s = in.next();
pr[i].GetSelf(s);
break;
default:
System.out.println("Your Enter Is Wrong , PLease Again");
break;
}
}
System.out.println("Each person's self-introduction:");
for (int i = 0; i < num; i++) {
pr[i].introduceSelf();
}
}
}
2. Shape 多態問題 問題描述 編程實現右圖的類圖,並編寫一段程序來測試。
(1)對於Shape類的getArea方法,可以是空函數,而對於 Rectangle 和 Circle 類的 getArea 方法,需要真正實現其功能,即計算相應圖形的面積
(2)Rectangle 和 Circle 類的構造函數需要實現
(3)需要測試各種情形,如單個對象、數組化(即定義一個數組,包含不同子類的對象)和參數化(定義一個函數,它的實參可以是不同子類的對象)等情形。 注:要求同上題,分別調用 getArea()函數。
import java.awt.geom.Area;
import java.util.Scanner;
class Shape{
Scanner in = new Scanner(System.in);
double area;
double GetArea(){return area;}
}
class Rectangle extends Shape{
double len; double wid;
public Rectangle() {
System.out.println("Please enter length and width:");
len = in.nextDouble(); wid = in.nextDouble();
}
double GetArea(){
area = len*wid;
return area;
}
}
class Circle extends Shape{
static final double t = 3.1415926;
double rad;
public Circle() {
System.out.println("Please enter the radius");
rad = in.nextDouble();
}
double GetArea(){
area = 0.5*t*Math.pow(rad, 2);
return area;
}
}
public class ShapeTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Please Enter The Number Of Graph:");
int num = 0;
num = in.nextInt();
int cho=0;
Shape[] sp = new Shape[num];
System.out.println("start——————————————————————————————————————————————————");
for (int i = 0; i < num; i++) {
System.out.println("Please choose the number to record the Shape");
System.out.println("1.Rectangle 2.Circle ");
cho = in.nextInt();
switch (cho) {
case 1:
sp[i]= new Rectangle();
System.out.println("The Number "+i+1+"'s area is "+sp[i].GetArea());
break;
case 2:
sp[i] = new Circle();
System.out.println("The Number "+i+"'s area is"+sp[i].GetArea());
break;
default:
System.out.println("Your Enter Is Wrong , PLease Again");
break;
}
}
System.out.println("End————————————————————————————————————————————————————");
}
}
3、 設計題目:模擬簡單的信息錄入系統。設計書、CD、磁帶三個類,每個類含有名字、作者或演唱者、出版社或唱片社、價格、出版日期等相關信息。根據系統提示從鍵盤輸入相關內容。
設計要求:可以使用類似命令行的方式來實現。程序運行後提示用戶可以執行的操作類型,並要求用戶輸入一種選擇。根據用戶的選擇,提示用戶輸入相關的信息(根據不同選擇,輸入不同的信息),最後在屏幕上輸出這些信息。
可以使用循環來完成,以接受用戶的多次輸入。當用戶選擇退出,程序結束。對於不合要求的輸入,給出提示,允許再重新輸入。對於不同類型的輸入信息,需要使用分支結構判別。
提示:由於書、CD、磁帶有共同的內容,可以設計一個父類,父類中包含公共信息。
class MyMedia{
String mediaName; //出版物名稱
float price; //出版物價格
String press; //出版社(磁帶發行商)
String artist; //作者(演唱者)
void mediaNameInput(){} //出版物名稱輸入成員函數
void mediaPriceInput(){} //價格輸入成員函數
void mediaPressInput(){} //出版社(磁帶發行商)輸入成員函數
void artistInput(){} //作者(演唱者)輸入成員函數
}
然後分別定義三個相應子類,繼承擴展父類的成員。參考界面如下圖所示:
import java.util.Scanner;
import com.sun.xml.internal.bind.v2.runtime.Name;
class MyMedia{
Scanner in = new Scanner(System.in);
String mediaName; //出版物名稱
float price; //出版物價格
String press; //出版社(磁帶發行商)
String artist; //作者(演唱者)
String name;
void mediaNameInput(){} //出版物名稱輸入成員函數
void mediaPriceInput(){} //價格輸入成員函數
void mediaPressInput(){} //出版社(磁帶發行商)輸入成員函數
void artistInput(){} //作者(演唱者)輸入成員函數
void Input(){
mediaNameInput();
mediaPriceInput();
mediaPressInput();
artistInput();
}
void Print(){
System.out.println(name+"的名字是:"+mediaName);
System.out.println(name+"的價格是:"+price);
System.out.println(name+"的出版社是:"+press);
System.out.println(name+"的作者是:"+artist);
System.out.println("\n\n");
}
}
class Book extends MyMedia{
void mediaNameInput(){
name = "書";
System.out.println("請輸入書的名字:");
mediaName = in.next();
}
void mediaPriceInput(){
System.out.println("請輸入書的價格:");
price = in.nextInt();
}
void mediaPressInput(){
System.out.println("請輸入書的出版社:");
press = in.next();
}
void artistInput(){
System.out.println("請輸入書的作者:");
artist = in.next();
}
}
class CD extends MyMedia{
void mediaNameInput(){
name = "CD";
System.out.println("請輸入CD的名字:");
mediaName = in.next();
}
void mediaPriceInput(){
System.out.println("請輸入CD的價格:");
price = in.nextInt();
}
void mediaPressInput(){
System.out.println("請輸入CD的出版社:");
press = in.next();
}
void artistInput(){
System.out.println("請輸入CD的作者:");
artist = in.next();
}
}
class Tape extends MyMedia{
void mediaNameInput(){
name = "磁帶";
System.out.println("請輸入磁帶的名字:");
mediaName = in.next();
}
void mediaPriceInput(){
System.out.println("請輸入磁帶的價格:");
price = in.nextInt();
}
void mediaPressInput(){
System.out.println("請輸入磁帶的出版社:");
press = in.next();
}
void artistInput(){
System.out.println("請輸入磁帶的作者:");
artist = in.next();
}
}
class Vet{
public void show(MyMedia a) {
System.out.println("您輸入的是以下信息:");
a.Print();
}
}
public class Media{
public static void main(String[] arg){
Scanner in = new Scanner(System.in);
String s = new String();
System.out.println("請選擇你要進行的操作(請輸入1——4中的任一數字):\n");
int sgn = 0;
while(true){
Vet v = new Vet();
System.out.println("1: 輸入書的信息\n2: 輸入CD的信息\n3: 輸入磁帶的信息\n4:退出系統");
sgn = in.nextInt();
if(sgn==4) break;
while(sgn>4||sgn<1){
System.out.println("Wrong Input. Please retype");
sgn = in.nextInt();
}
switch (sgn) {
case 1:
Book b = new Book();
b.Input();
v.show(b);
break;
case 2:
CD c = new CD();
c.Input();
v.show(c);
break;
case 3:
Tape t = new Tape();
t.Input();
v.show(t);
break;
default:
break;
}
}
}
}