Java基礎——關於介面和抽象類的幾道練習題

来源:http://www.cnblogs.com/1693977889zz/archive/2017/06/18/7045833.html
-Advertisement-
Play Games

呃,一定要理解之後自己敲!!!這幾道題,使我進一步瞭解了介面和抽象類。 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兩個),果然,成功啦。仔細一想,既然同一個包下,公共類之間可以訪問,這種排同性就是驗證啊,也可以省下很多資源。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 現在市面上的編程語言以面向對象為主流。面向對象先要從一些最基本的做起。比如我24歲就結婚了,不然怎麼面向對象編程。然後剛結婚就生娃了,不然對象跑了咋辦?new一個?創建銷毀開銷很大的,還是生個娃持續持有對象的引用的好。 為啥有些人開口說話能說很久,有些人說話有一搭沒一搭的?據我觀察發現,動手幹活差不 ...
  • 首先要導入 包. 下載解壓後, 目錄下有三個包,使用 的話,只需要導入 ,`mchange commons java 0.2.11.jar`. 要連接 資料庫,需要導入 . 為了方便的操作資料庫鏈接進行查詢,需要導入 ,`commons collections 3.2.2.jar commons l ...
  • 原文地址http://www.cnblogs.com/xrq730/p/7003082.html,轉載請註明出處,謝謝 前言 一年半前寫了一篇文章Spring3:AOP,是當時學習如何使用Spring AOP的時候寫的,比較基礎。這篇文章最後的推薦以及回覆認為我寫的對大家有幫助的評論有很多,但是現在 ...
  • //希爾排序 加多一個gap間隔 DEV會崩潰 VC++6.0可以正常運行 #include using namespace std; void InsertSort( int k[], int n ) { int i, j,temp; int gap = n; do { gap = (gap/3)... ...
  • 開始時的首頁 點擊modules 點擊modules界面的Paths 點擊Libraries 選擇lib文件 點擊Facets 選擇項目 這就是我404的主要原因,因為小白第一次使用idea 所以很瘋狂的一直百度,到後面的google搜索,終於在經過1天半的時間找到問題了 web.xml這裡要修改, ...
  • 1.C 和 Java 都是多線程語言。( ) 2.如果線程死亡,它便不能運行。( ) 3.在 Java 中,高優先順序的可運行線程會搶占低優先順序線程。( ) 4.程式開發者必須創建一個線程去管理記憶體的分配。( ) 5.一個線程在調用它的 start 方法,之前,該線程將一直處於出生期。( ) 6.當調 ...
  • 一、自定義攔截器 1.架構 2.攔截器創建 3.攔截器api 4.攔截器配置 二、struts2標簽 1.標簽體系 2.struts2標簽結構 3.控制標簽 準備Action然後再到jsp練習struts2標簽 開始練習控制標簽: 4.數據標簽 5.表單標簽 6.非表單標簽 在action中添加錯誤 ...
  • java 後臺返回一個ModelAndView 對象,然後加入這2行設置 業可以把這二行設置放入JSP中 在jsp代碼如下: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...