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     @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兩個),果然,成功啦。仔細一想,既然同一個包下,公共類之間可以訪問,這種排同性就是驗證啊,也可以省下很多資源。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM