Java基礎——關於介面和抽象類別的幾道練習題,java幾道
呃,一定要理解之後自己敲!!!這幾道題,使我進一步瞭解了介面和抽象類別。
1.設計一個商品類 欄位:
商品名稱,重量,價格,配件數量,配件製造廠商(是數組,因為可能有多個製造廠商)
要求: 有建構函式
重寫 toString 方法
重寫 equals方法,進行兩件商品的比較
1 package TT; 2 3 import java.util.Arrays; 4 5 public class G { 6 private int 重量; 7 private String 商品名稱; 8 private int 價格; 9 private int 配件數量;10 private String[] 配件製造廠商列表;11 12 public G(int 重量, String 商品名稱, int 價格, int 配件數量, String[] 配件製造廠商列表) {13 super();14 this.重量 = 重量;15 this.商品名稱 = 商品名稱;16 this.價格 = 價格;17 this.配件數量 = 配件數量;18 this.配件製造廠商列表 = 配件製造廠商列表;19 }20 21 @Override22 public String toString() {23 return "G [重量=" + 重量 + ", 商品名稱=" + 商品名稱 + ", 價格=" + 價格 + ", 配件數量="24 + 配件數量 + ", 配件製造廠商列表=" + Arrays.toString(配件製造廠商列表) + "]";25 }26 27 public boolean equals(Object obj) {28 if (this == obj) {29 return true;30 }31 32 if (obj instanceof G) {33 G goods = (G) obj;34 35 if (this.重量 == goods.重量 && this.價格 == goods.價格36 && this.商品名稱.equals(goods.商品名稱) && this.配件數量 == goods.配件數量) {37 for (int i = 0; i < this.配件製造廠商列表.length; i++) {38 if (this.配件製造廠商列表[i] != goods.配件製造廠商列表[i]) {39 return false;40 }41 }42 return true;43 } else {44 return false;45 }46 } else {47 return false;48 }49 }50 //將測試類別和上面的放一塊兒了51 public static void main(String[] args) {52 53 String[] 廠商列表1 = { "微軟", "索尼", "三星" };54 String[] 廠商列表2 = { "微軟", "索尼", "三星" };55 G g1 = new G(40, "電腦", 4000, 30, 廠商列表1);56 G g2 = new G(40, "顯示器", 4000, 30, 廠商列表2);57 58 System.out.println(g1);59 System.out.println(g2);60 61 System.out.println(g1.equals(g2));62 }63 }
2.設計一個抽象類別,並示範它的使用 (三級)
1 package TT; 2 3 //抽象類別 4 abstract class 數學老師標準{ 5 abstract void 講數學(); 6 abstract int add(int a,int b); 7 } 8 9 //第二級抽象類別10 abstract class 普通數學老師標準 extends 數學老師標準{11 void 講數學(){12 System.out.println("我能講數學");13 }14 }15 16 //第三級抽象類別17 class 真正的數學老師 extends 普通數學老師標準{ //注意這裡能不能用abstract修飾,修飾了以後會對上下的影響18 //可以重寫,也可以不重寫19 void 講數學(){20 System.out.println("我能講高數");21 }22 int add(int a,int b){23 return a+b;24 }25 }26 class Test{27 public static void main(String[] args) {28 數學老師標準 t1=new 真正的數學老師();29 int result=t1.add(44, 4444); 30 System.out.println("計算結果是:"+result);31 t1.講數學();32 }33 }
3.設計一個介面, 並設計一個實作類別,實現這個介面
1 package TT; 2 3 interface 銀行標準{ 4 int MONEY=9900000; 5 void 取錢(); 6 void 存錢(); 7 } 8 9 class 工商銀行 implements 銀行標準{10 public void 取錢(){11 System.out.println("錢進銀行了");12 }13 14 @Override//全部方法都拿來15 public void 存錢() {16 System.out.println("錢出去了");17 }18 }19 public class Test {20 public static void main(String[]args){21 銀行標準 bank=new 工商銀行();22 bank.取錢();23 bank.存錢();24 25 System.out.println("銀行的老底是"+銀行標準.MONEY);//此處銀行標準用bank會報錯,The static field 銀行標準.MONEY should be accessed in a static way26 27 }28 29 }
4.設計一個類,可以同時實現多個介面
1 package TT; 2 3 interface 建築標準 { 4 void kaimen(); 5 6 void guanmen(); 7 } 8 9 interface 銀行標準 {10 int MONEY = 9999;11 12 void 取錢();13 14 void 存錢();15 }16 17 class 工商銀行 implements 銀行標準,建築標準 {18 19 @Override20 public void kaimen() {21 System.out.println("我能開門");22 23 }24 25 @Override26 public void guanmen() {27 // TODO Auto-generated method stub28 System.out.println("我能關門");29 30 }31 32 @Override33 public void 取錢() {34 // TODO Auto-generated method stub35 System.out.println("我能取錢");36 }37 38 @Override39 public void 存錢() {40 // TODO Auto-generated method stub41 System.out.println("我能存錢");42 43 }44 45 }46 47 public class Test2 {48 public static void main(String[] args) {49 工商銀行 bank = new 工商銀行();50 bank.取錢();51 bank.存錢();52 System.out.println("銀行的底是" + 工商銀行.MONEY);53 54 bank.kaimen();55 bank.guanmen();56 }57 }
5.設計一個類,在繼承一個類的同時,實現其的兩個介面(具體是什麼介面自行設計)
1 package TT; 2 interface 建築標準{ 3 void kaimen(); 4 void guamen(); 5 } 6 interface 銀行標準 7 { 8 int MONEY=900000; //介面中的變數,全相當於public static final 類型的 9 void 取錢();10 void 存錢();11 }12 13 14 class 金融機構{15 void 貨幣流通(){16 System.out.println("貨幣流通");17 }18 }19 class 工商銀行 extends 金融機構 implements 銀行標準, 建築標準 {20 21 public void 取錢() {22 System.out.println("錢進了銀行");23 }24 25 26 public void 存錢() {27 System.out.println("錢從銀行進行個人手裡"); 28 }29 30 31 @Override32 public void kaimen() {33 System.out.println("銀行有個大門,能開啟");34 35 }36 37 38 @Override39 public void guamen() {40 System.out.println("銀行有個鐵門,關了以後誰都進不來了");41 42 }43 44 }45 46 class Test4{47 public static void main(String[] args) {48 工商銀行 bank=new 工商銀行(); 49 bank.取錢() ;50 bank.存錢() ;51 System.out.println("銀行的底是"+bank.MONEY);52 53 bank.kaimen(); 54 bank.guamen();55 56 bank.貨幣流通();57 58 }59 }
最後的彩蛋彩蛋彩蛋!!!!
由於我在練習的時候將這幾個例題放在了同一個TT包下,一共有5個檔案。最後的最後,上面的後三個例子開始報錯(比如報錯:The type 銀行標準 is already defined)。
啊啊啊啊,調試半個小時,都沒弄好。後來靜一下想,既然Eclipse提示XXX已經定義了,是不是只要在同一個包下,無論你建立多少個類,裡面都不能重複定義相同類名檔案呢?之後就開始Delete兩個),果然,成功啦。仔細一想,既然同一個包下,公用類之間可以訪問,這種排同性就是驗證啊,也可以省下很多資源。