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 對象引用,以及對象賦值
※從零開始學會做一個簡單的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:有進步,未解決根本問題