呃,一定要理解之後自己敲!!!這幾道題,使我進一步瞭解了介面和抽象類。 1.設計一個商品類 欄位: 商品名稱,重量,價格,配件數量,配件製造廠商(是數組,因為可能有多個製造廠商) 要求: 有構造函數 重寫 toString 方法 重寫 equals方法,進行兩件商品的比較 2.設計一個抽象類,並演示 ...
呃,一定要理解之後自己敲!!!這幾道題,使我進一步瞭解了介面和抽象類。
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 @Override 22 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 way 26 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 @Override 20 public void kaimen() { 21 System.out.println("我能開門"); 22 23 } 24 25 @Override 26 public void guanmen() { 27 // TODO Auto-generated method stub 28 System.out.println("我能關門"); 29 30 } 31 32 @Override 33 public void 取錢() { 34 // TODO Auto-generated method stub 35 System.out.println("我能取錢"); 36 } 37 38 @Override 39 public void 存錢() { 40 // TODO Auto-generated method stub 41 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 @Override 32 public void kaimen() { 33 System.out.println("銀行有個大門,能打開"); 34 35 } 36 37 38 @Override 39 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兩個),果然,成功啦。仔細一想,既然同一個包下,公共類之間可以訪問,這種排同性就是驗證啊,也可以省下很多資源。