Java面向對象之抽象類abstract 入門實例

来源:https://www.cnblogs.com/zhuxr/archive/2018/04/22/8910360.html
-Advertisement-
Play Games

一、基礎概念 抽象事物,是若沒有具體的信息可以描述這個事物,這個事物可以稱為抽象事物。 抽象類,是不斷的向上抽取而來。抽取方法聲明而不確定具體的方法內容。由不同的子類來完成具體的方法內容。 (一)抽象類的特點: 1、抽象方法沒有方法體,必須由抽象關鍵字abstract來修飾。 1、抽象方法一定是存在 ...


一、基礎概念

  抽象事物,是若沒有具體的信息可以描述這個事物,這個事物可以稱為抽象事物。

  抽象類,是不斷的向上抽取而來。抽取方法聲明而不確定具體的方法內容。由不同的子類來完成具體的方法內容。

  (一)抽象類的特點:

    1、抽象方法沒有方法體,必須由抽象關鍵字abstract來修飾。

    1、抽象方法一定是存在於抽象類中,必須有抽象關鍵字abstract來修飾。

    2、抽象類不能實例化。不能用new關鍵字創建對象。

    3、子類必須覆蓋抽象類中的所有抽象方法後,才可以實例化。否則該子類還是一個抽象類。

  (二)抽象類中可以有構造函數:

    因為抽象類不能創建對象,所有抽象類中的構造函數是不能給抽象類的對象進行實例化。但是抽象類可以有子類,抽象類的構造函數可以子類的對象進行初始化。所有抽象類中可以有構造函數。

  (三)抽象類和一般類的區別:

    抽象類可以描述事物的屬性和行為。描述事物的信息不具體,可以定義抽象方法,但不能進行實例化。

    一般類可以描述事物的屬性和行為。事物的信息是具體的,不可以定義抽象方法,但可以進行實例化。

  (四)抽象類一定是個父類:

    因為必須需要子類覆蓋抽象方法後,才可以實例化。才能使用這些方法。

  (五)抽象類中是可以不定義抽象方法的:

    這時的抽象類的功能,僅僅是讓該類不能創建對象。

  (六)抽象關鍵字abstract和那些關鍵字不能共存的:

      關鍵字final、關鍵字private、關鍵字static。

二、實例代碼

  要求:公司中有程式員和項目經理。程式員有姓名、工號和薪水。併為公司進行工作。項目經理除了有姓名、工號和薪水外還有獎金。也為公司進行工作。對給出的需求進行數據建模。

  分析:

  程式員:屬性:姓名、工號、薪水

      行為:工作

  項目經理:屬性:姓名、工號、薪水、獎金
       行為:工作

  兩者不存在所屬關係,但是有共性內容,可以向上抽取為雇員。

  雇員:屬性:姓名、工號、薪水

     行為:工作

 1 //抽象類 Employee    
 2 abstract class Employee 
 3 {
 4     private String name;
 5     private int id;
 6     private double pay;
 7     
 8     public void setName(String name)
 9     {
10         this.name = name;
11     }
12     public void setId(int id)
13     {
14         this.id = id;
15     }
16     public void setPay(double pay)
17     {
18         this.pay = pay;
19     }
20     
21     public String getName()
22     {
23         return name;
24     }
25     public int getId()
26     {
27         return id;
28     }
29     public double getPay()
30     {
31         return pay;
32     }
33     
34     Employee(String name,int id,double pay)
35     {
36         this.name = name;
37         this.id = id;
38         this.pay = pay;
39     }
40     
41     //抽象方法 work
42     public abstract void work();
43 }
44 
45 //描述程式員繼承抽象類 Employee
46 class Programmer extends Employee
47 {
48     Programmer(String name,int id,double pay)
49     {
50         super(name,id,pay);    
51     }
52     public void work()
53     {
54         System.out.println("name: "+this.getName()+"  id: " +this.getId()+"  pay: "+this.getPay() );
55         System.out.println("Programmer work ......");
56     }
57     
58 }    
59 
60 
61 //描述項目經理繼承抽象類 Employee
62 class Manager extends Employee
63     
64 {
65     private double bonus;
66     
67     Manager(String name,int id,double pay,double bonus)
68     {
69         super(name,id,pay);
70         this.bonus = bonus;
71     }
72     public void work()
73     {
74         System.out.println("name: "+this.getName()+"  id: " +this.getId()+"  pay: "+this.getPay()+"  bonus: " +bonus);
75         System.out.println("Manager work  ......");
76     }
77 }
78 
79 class AbstractDemo
80 {
81      public static void main(String[] args) 
82      {
83          Programmer a = new Programmer("xiaoming",001,5000.00);
84          a.work();
85          Manager m = new Manager("xiaohong",010,8000.00,600.00);
86          m.work();
87      }
88 }

三、代碼執行

  

 


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

-Advertisement-
Play Games
更多相關文章
  • 想要做出一個成功的 PHP 擴展包,不僅僅是簡單的將代碼放進文件夾中就可以了,除此之外,還有非常多的因素來決定你的擴展是否優秀。以下清單的內容將有助於完善你的擴展,並且在 PHP 社區中得到更多的重視。 1. 為你的擴展選擇一個正確合適的名字 確保你的命名沒有被其他項目使用。 擴展的名字需要和你的 ...
  • Lesson Eight 2018-04-23 02:07:01 封裝與隱藏:問題:當創建了類的對像以後,如果直接通過“對象.屬性”的方式對相應的對像屬性賦值的話,可能會出來不滿足實際情況的意外。 引出:通過“對像 .方法”的形式,來控制對像對屬性的訪問。對屬性的要求術可以通過方法來體現。 解決:1 ...
  • 集合的操作 集合是一個無序的,不重覆的數據組合,它的主要作用如下: 去重,把一個列表變成集合,就自動去重了 關係測試,測試兩組數據之間的交集,差集,並集等關係 集合的寫法 list_1 = set([1, 3, 4, 6, 7, 12, 5]) 集合的關係 list_1 = set([1, 3, 5 ...
  • 問題:在使用連接池和線程綁定之後需要關閉其他的參數麽(stat? con?...) ...
  • 多線程併發與線程安全相關知識整理如下: 一、線程怎麼保證安全性。 什麼是線程安全性 當多個線程訪問某個類時,不管運行時環境採用何種調度方式或者這些進程將如何交替執行,並且在主調代碼中不需要任何額外的同步或協同,這個類都能表現出正確的行為,那麼就稱這個類是線程安全的。 線程安全性的三大特征 原子性、有 ...
  • 1. 併發編程的3個概念 併發編程時,要想併發程式正確地執行,必須要保證原子性、可見性和有序性。只要有一個沒有被保證,就有可能會導致程式運行不正確。 1.1. 原子性 原子性:即一個或多個操作要麼全部執行並且執行過程中不會被打斷,要麼都不執行。 一個經典的例子就是銀行轉賬:從賬戶A向賬戶B轉賬100 ...
  • 再次整理了一下這個日誌收集系統的框,如下圖 這次要實現的代碼的整體邏輯為: 完整代碼地址為: https://github.com/pythonsite/logagent etcd介紹 高可用的分散式key-value存儲,可以用於配置共用和服務發現 類似的項目:zookeeper和consul 開 ...
  • Java中的IO流 分類 根據流的方向:輸入流和輸出流 根據讀取文字的大小:位元組流和字元流(位元組按照位元組讀取,讀取中文容易亂碼,字元流按照字元讀取,通常用於讀取中文) 根據讀取的方式:節點流和緩存流 分類 根據流的方向:輸入流和輸出流 根據讀取文字的大小:位元組流和字元流(位元組按照位元組讀取,讀取中文容 ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...