java is-a_java中 is - a和 has - a的區別

Java中is-a和has-a的區別

1.“is-a”是繼承的關系,比如人是動物,人和動物是繼承的關系;

2.“has-a”是聚合的關系,比如人有眼睛,人和眼睛是聚合的關系;

也可以理解為 is-a 是“繼承”

但has-a是“接口”關系。是“相互依賴”的關系,同時它們的生命周期都是一樣的。

我們以一道scjp考題為例,來講解"is a"和"has a"的區別 :

Your chief Software designer has shown you a sketch of the new Computer parts system she is about to create. At the top of the hierarchy is a Class called Computer and under this are two child classes. One is called LinuxPC and one is called WindowsPC.

The main difference between the two is that one runs the Linux operating System and the other runs the Windows System. Under the WindowsPC are two Sub classes one called Server and one Called Workstation. How might you appraise your designers work?

a) Give the goahead for further design using the current scheme

b) Ask for a?re-design?of the hierarchy with changing the Operating System to a field rather than Class type

c) Ask for the option of WindowsPC to be removed as it will soon be obsolete

d) Change the hierarchy to remove the need for the superfluous Computer Class.

答案:b

解析:本題考察的知識點是“is a”和“has a”的區別。“is a”代表的是類之間的繼承關系,比如PC機是計算機,工作站也是計算機。PC機和工作站是兩種不同類型的計算機,但都繼承了計算機的共同特性。因此在用?Java語言實現時,應該將PC機和工作站定義成兩種類,均繼承計算機類。

“has a”代表的是對象和它的成員的從屬關系。同一種類的對象,通過它們的屬性的不同值來區別。比如一臺PC機的操作系統是Windows,另一臺PC機的操作系統是Linux。操作系統是PC機的一個成員變量,根據這一成員變量的不同值,可以區分不同的PC機對象。

再比如張三和李四都是人,但他們的名字不一樣,可以以此區分這兩個具體的人。名字應該作為人的成員變量。如果將名字叫“張三”的人和名字叫“李四”的人分別定義成兩個類,均繼承“人”這個類,顯然是不合理的。

以上內容摘自<>

1. IS-A, HAS-A兩種經典OO模式:

1.1 You can just use IS-A to figure out the relationship of Subclass and Superclass. If B is a A, that means class B extends class A. That‘s TRUE everywhere in the inheritance tree.

Example: Canine(犬科動物) is-A Animal, So Class Canine extends Animal; Wolf is-A Canine, So class wolf extends Canine; But note you can‘t change their position, Animal is-A Canine never happen, so class animal never extends Canine.

1.2 HAS-A, we can remember a case: Bathroom HAS-A Tub, Tub NEVER HAS-A Bathroom, that means class Bathroom has a instance variable(field) of class tub.

as we can see:

public class Bathroom()

{ private Tub tub;

Tub.flush(); }

public class Tub()

{ public void flush()

{ //more flush code here. } }

原文:https://www.cnblogs.com/asasooo998/p/11622644.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530559.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530559.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530559.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

支付寶支付對賬單java_[Java]解析支付寶對賬單csv

配置相關公鑰和私鑰這些需要在支付寶的賬戶中心配置image.png這些內容在支付寶平臺上都有教程,因為下載對賬單這個功能比較簡單,不需要入聚石塔下載對賬單https://docs.open.alipay.com/20180417160701241302/fd3qt1官方文檔寫的很清楚,而且能直接用,將配置好的公鑰私鑰APPID等…

cmd編譯java文件中文亂碼_亂碼 HelloWorld 世界你好 cmd 執行輸出的中文java 顯示亂碼 解決 另附 win無法執行編譯運行javac java編譯文件的解決方案...

【博客園cnblogs筆者m-yb原創&#xff0c;轉載請加本文博客鏈接&#xff0c;筆者公眾號aandb7 愛碼一生&#xff0c;QQ群927113708, github: https://github.com/mayangbo666】這是一篇java入門:java是眾多編程語言之一, 就是開發的工具技術, 沒什么特別, 是應用廣, 嚴謹的語言…

java linux獲取實時cpu_用java取得linux系統cpu、內存的實時信息(參考別人代碼)...

/**   * cat /proc/cpuinfo - cpu (i.e. vendor, mhz, flags like mmx) * cat /proc/interrupts - 中斷   * cat /proc/ioports - 設備io端口   * cat /proc/meminfo - 內存信息(i.e. mem used, free, swap size)   * cat /proc/partitions - …

自我學習--關于如何設計光耦電路

本人在項目中多次設計光耦電路&#xff0c;目前電路在項目中運行比較平穩&#xff0c;所以總結一下自己的設計經驗&#xff0c;與大家交流一下&#xff0c;如有錯誤還希望大家指出改正&#xff0c;謝謝&#xff08;V&#xff1a;Smt15921588263&#xff1b;愿與大家多交流&…

java 讀取 xmltype_java操作XMLType的幾種方法

XMLType是oracle數據庫特有的數據類型可以用來存儲一段xml,通過java(本文使用jdbc)插入XMLType根據sql中參數的類型通常有以下3種方法:本文使用的數據庫為oracle10.2.1一、String,客戶端只需傳遞一個字符串參數,創建xmltype的任務完全交給數據庫,此方法數據庫的壓力最大String …

java運算符優先級舉例_列舉出java運算符的優先級

展開全部優先級 操作符 含義 關聯性32313133353236313431303231363533e59b9ee7ad9431333337613833 用法----------------------------------------------------------------1 [ ] 數組下標 左 array_name[expr]. 成員選擇 左 o…

java websocket ie8_websocket兼容IE8

最近由于項目需要做實時聊天功能&#xff0c;選擇了html5的websocket方案(事實上node.jssocket.io兼容性更好&#xff0c;個人覺得這個方案更加完美)&#xff0c;websocket實現實時聊天的demo網上很多&#xff0c;但是兼容IE8的資料卻很少&#xff0c;這塊折騰了很久。websoket…

java newfile() bug_java初學者小白?遇到BUG就慌了?有關java異常的十大問題詳解!...

1.已檢查與未檢查簡而言之&#xff0c;必須在方法中顯式捕獲已檢查的異常&#xff0c;或在方法的throws子句中聲明該異常。未檢查的異常是由無法解決的問題引起的&#xff0c;例如被零除&#xff0c;空指針等。檢查的異常特別重要&#xff0c;因為您希望使用API的其他開發人員知…

java 日期操作工具類_java8操作日期的工具類

java8操作日期的工具類一、方法概覽該包的API提供了大量相關的方法&#xff0c;這些方法一般有一致的方法前綴&#xff1a;of&#xff1a;靜態工廠方法。parse&#xff1a;靜態工廠方法&#xff0c;關注于解析。get&#xff1a;獲取某些東西的值。is&#xff1a;檢查某些東西的…

mysql攔截器實現crud_Mybatis自定義SQL攔截器

本博客介紹的是繼承Mybatis提供的Interface接口&#xff0c;自定義攔截器&#xff0c;然后將項目中的sql攔截一下&#xff0c;打印到控制臺。先自定義一個攔截器package com.muses.taoshop.common.core.database.config;import org.apache.commons.lang3.StringUtils;import or…

python 桌面提醒_使用Python獲取桌面通知

開發一款可提醒您諸如警報或待辦事項清單等計劃的應用程序真是太好了。在本文中&#xff0c;我將引導您逐步編寫如何使用Python獲取桌面通知的程序。桌面通知應用程序如何工作&#xff1f;您今天將要學習開發的桌面通知應用程序的主要目的是不斷提醒我們我們一天中需要完成的不…

java線程同步的實現_【Java多線程系列三】實現線程同步的方法

packagecom.concurrent.test;importjava.util.Stack;importjava.util.concurrent.ArrayBlockingQueue;importjava.util.concurrent.BlockingQueue;importjava.util.concurrent.locks.Condition;importjava.util.concurrent.locks.ReentrantLock;/*** Description: 三種方法實現…

python建立py文件夾過程_Pycharm創建python文件自動添加日期作者等信息(步驟詳解)...

百度AI接口的調用方法不必多介紹。官網地址 人流量統計新建AipBodyAnalysisfrom aip import AipBodyAnalysis""" 你的 APPID AK SK """APP_ID 你的 App IDAPI_KEY 你2021-02-03 14:24:01本文主要介紹了在python3.9下如何安裝scrapy的方法&…

python父親節祝福_父親節祝福語精選簡短 父親節祝福語簡短獨特

1.您的堅忍不拔和錚錚硬骨是我的榜樣&#xff0c;我從您那兒汲取到奮發的力量&#xff0c;走過挫折&#xff0c;邁向成功&#xff0c;爸爸&#xff0c;您是我永遠的榜樣&#xff0c;我愛您&#xff01;祝您節日快樂&#xff01;2.您的懷抱&#xff0c;是我的小天地&#xff1b;…

redis java應用_redis在JAVA的簡單應用

reids是一個高性能的key-value數據庫。它存儲的value支持各種類型的數據&#xff0c;如String,List&#xff0c;set&#xff0c;hash類型。在此基礎上&#xff0c;各種不同方式的排序。本文不具體爭對redis數據庫的各種命令&#xff0c;而是在Java實現簡單的調用。1. //初始化R…

java安裝 hello_安裝JAVA步驟,并編寫HELLOWORLD程序

安裝Java步驟&#xff0c;并編寫helloworld程序1.安裝JDK(Java Development Kit)JDK是Java開發工具包(Java Development Kit)的縮寫。它是一種用于構建在J Java 平臺上發布的應用程序、applet和組件的開發環境。即編寫Java程序必須有JDK&#xff0c;它提供了編譯Java和運行Java…

java實現Fmeasure計算_聚類結果的評估指標及其JAVA實現

一. 前言又GET了一項技能。在做聚類算法的時候&#xff0c;由于要評估所提出的聚類算法的好壞&#xff0c;于是需要與一些已知的算法對比&#xff0c;或者用一些人工標注的標簽來比較&#xff0c;于是用到了聚類結果的評估指標。我了解了以下幾項。TP:是指被聚在一類的兩個量被…

java隨機產生坐標點_剛學JAVA不久,問一下怎么把這個程序實現隨機啊,不是按照坐標...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓int i;int z0;int j,h0,k0;int AppletWidch,AppletHeight,currentImage;Image Animation[],SerialImage,OffScreen;Thread newThread;Graphics drawOffScreen;MediaTracker MT;ImageProducer Source;CropImageFilter CutImage;publ…

ubuntu安裝java的rpm_ubuntu安裝jdk-6u45-linux-x64-rpm.bin

1、參考網址&#xff1a;ZC: 網頁內容保存于 “百度云 CodeSkill33 --> 全部文件 >來自網頁 > Linux > ubuntu > ubuntu安裝jdk-6u45-linux-x64-rpm.bin__Work_20160115_0851.rar”2、(1)、我是將jdk-6u45-linux-x64.bin放在 "/home"下的(2)、命令&qu…

java窗體容器坐標_Java的屏幕坐標是以像素為單位的,容器的左下角被確定為坐標的起點。...

屏單位的的左定為的起點Despite ________ difficulties, they did not find the life in London unpleasant.幕坐As soon as I was ____________, I began to have second thoughts about leaving.標被確The girl was uncertain what to do, or what tone of voice to_________…