當前位置:
首頁 > 知識 > Java抽象類使用實例解讀

Java抽象類使用實例解讀

Java抽象類單繼承使用實例解讀

假設現在三類事物:機器人、人、豬

三類事物可以做出的行為分別是:

機器人:充電,工作

人:吃飯,工作,睡覺

豬:吃飯,睡覺

首先來分析一下,三類事物的共同特點是,能做出相應的行為。所以我們可以認定「行為(Action)」是父類,但是「行為」這個東西呢,又不是生活中的某樣實在的東西,所以「行為」可以認定為是一個抽象類(在有一點很重還要:寫父類時別去考慮子類,因為子類既可以繼承,也可以拒絕繼承(即覆寫)。)

而且,為了實現我們想要的東西,需要加一些其他的方法:command(int flag).

在父類中定義三個方法:

public static final int EAT = 1 ;

public static final int SLEEP = 5 ;

public static final int WORK = 7 ;

以上代碼有一點需要時注意:之所以數字設置成1、5、7,而不是1、2、3.這是因為在求和時1+2 =3 ,本來1+2指的是豬,左左後輸出時卻變成人!

廢話不多說,先給大家看看看運行結果:

以下是本程序源代碼:

/* 現在有三類事物: 機器人:充電,工作 人:吃飯,工作,睡覺 豬:吃飯,睡覺 工作要求:可以實現以上操作的控制,即:可以任意控制人,機器人,豬的操作行為(吃、睡、工作)! */ abstract class Action { public static final int EAT = 1 ; public static final int SLEEP = 5 ; public static final int WORK = 7 ; public void command(int flag){ //switch 只支持數值判斷,而if支持的是條件判斷 switch(flag){ case EAT : this.eat() ; break ; case SLEEP : this.sleep() ; break ; case WORK : this.work() ; break ; case EAT + WORK : //邊吃飯邊工作 this.eat() ; this.work() ; break; } } //之所以定義為抽象方法,是因為現在不確定子類的實現什麼樣子的! public abstract void eat() ; public abstract void sleep() ; public abstract void work() ; } class Robot extends Action { public void eat() { System.out.println("機器人補充能量") ; } public void sleep() {} public void work() { System.out.println("機器人正在工作") ; } } class Human extends Action { public void eat() { System.out.println("吃飯") ; } public void sleep() { System.out.println("睡覺") ; } public void work() { System.out.println("人正在工作") ; } } class Pig extends Action { public void eat() { System.out.println("豬吃飯") ; } public void sleep() { System.out.println("豬睡覺") ; } public void work() { } } //以上三個都屬於行為的子類 public class TestDemo{ public static void main(String args[]){ fun(new Robot()) ; fun(new Human()) ; fun(new Pig()) ; } public static void fun(Action act) { act.command(Action.EAT) ; act.command(Action.SLEEP) ; act.command(Action.WORK) ; } }

總結:1.抽象類強制規定了子類必須要做的事情,而且可以與抽象類的普通方法相配合使用。

2.抽象類具有單繼承局限性(其實在實際的開發中,抽象類用了20%都不到)

編譯運行什麼的我在前面手記的中已經提到了,大家可以翻看,另外大家如果有什麼需要,歡迎評論!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java吧 的精彩文章:

Java到底是不是一種純面向對象語言?
JAVA 對象引用,以及對象賦值
從零開始學會做一個簡單的APP
一張圖揭秘Java 自學和培訓的區別
一張圖揭秘Java自學和培訓的區別

TAG:java吧 |

您可能感興趣

新手必讀系列:實例解讀TensorFlow
mybatis的擴展實現源碼解讀
《Nature Genetics》解讀腫瘤利器,預測癌症進化
disruptor 源碼解讀
專業解讀 Business Analytics項目
誰說資料庫不適合Docker?解讀 MySQL DB Mesh的創造性實踐
mybaits sqlSession 源碼解讀
Kaggle Carvana 圖像分割比賽冠軍模型 TernausNet 解讀
Amazon PPC重要基礎度量及解讀
解讀葡萄牙人鑽石Portuguese Diamond
大咖解讀-CalroQuest量表可能有助於幫助早期診斷IBD
帶你解讀蘇研openstack持續集成實踐
詳細解讀Python數據挖掘
解讀目標檢測新範式:Segmentations is All You Need
ICO白皮書解讀——Basecoin
解讀 Mobileye的RSS 模型,對自動駕駛有什麼意義?
Deep Forest 演算法解讀
解讀 | 華為方舟編譯器是如何實現 Android 性能革命的?
哈佛醫學院研究員解讀DeepMind大突破AlphaFold:有進步,但未解決根本問題
哈佛醫學院解讀AlphaFold:有進步,未解決根本問題