java 計算器類圖_多態計算器(封裝、繼承、多態、簡單工廠)

一.封裝

向對象程序設計中,一個非常重要的技術便是封裝,也就是把客觀事物封裝成抽象的類,并且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。這樣做的好處在于可以使類內部的具體實現透明化,只要其他代碼不依賴類內部的私房數據,你便可以安心修改這些代碼。此外,這樣做也是出于安全方面的考慮,如果代表網上支付卡密碼的變量隨便就可以被訪問到,這樣的系統誰還敢用呢?

訪問修飾符:

Private:只有類本身能存取.

Protected:類和派生類可以存取.

Internal:只有同一個項目中的類可以存取.

Protected Internal:是Protected和Internal的結合.

Public:完全存取.

實例代碼

class Operation //運算基類

{private double _numberA = 0;private double _numberB = 0;public doubleNumberA

{get { return_numberA; }set { _numberA =value; }

}public doubleNumberB

{get { return_numberB; }set { _numberB =value; }

}public virtual double GetResult() //定義虛方法

{double result = 0;returnresult;

}

}

上面 Operation類中字斷與方法 就實現了一個封裝。

二.多態

1、多態:同一操作作用于不同的對象,可以有不同的解釋,產生不同的執行結果。在運行時,可以通過指向基類的指針,來調用實現派生類中的方法。

編譯時的多態性:

編譯時的多態性是通過重載來實現的。對于非虛的成員來說,系統在編譯時,根據傳遞的參數、返回的類型等信息決定實現何種操作。

運行時的多態性:

運行時的多態性就是指直到系統運行時,才根據實際情況決定實現何種操作。C#中,運行時的多態性通過虛成員實現。

編譯時的多態性為我們提供了運行速度快的特點,而運行時的多態性則帶來了高度靈活和抽象的特點。

2、實現多態:

接口多態性。

繼承多態性。

通過抽象類實現的多態性。

3、override關鍵字:

重寫父類中的virtual修飾的方法,實現多態。

三.繼承

繼承主要實現重用代碼,節省開發時間。

1、C#中的繼承符合下列規則:

繼承是可傳遞的。如果C從B中派生,B又從A中派生,那么C不僅繼承了B中聲明的成員,同樣也繼承了A中的成員。Object類作為所有類的基類。

派生類應當是對基類的擴展。派生類可以添加新的成員,但不能除去已經繼承的成員的定義。

構造函數和析構函數不能被繼承。除此之外的其它成員,不論對它們定義了怎樣的訪問方式,都能被繼承。基類中成員的訪問方式只能決定派生類能否訪問它們。

派生類如果定義了與繼承而來的成員同名的新成員,就可以覆蓋已繼承的成員。但這并不因為這派生類刪除了這些成員,只是不能再訪問這些成員。

類可以定義虛文法、虛屬性以及虛索引指示器,它的派生類能夠重載這些成員,從而實現類可以展示出多態性。

2、new關鍵字

如果父類中聲明了一個沒有friend修飾的protected或public方法,子類中也聲明了同名的方法。則用new可以隱藏父類中的方法。(不建議使用)

3、base關鍵字

base 關鍵字用于從派生類中訪問基類的成員:

調用基類上已被其他方法重寫的方法。

指定創建派生類實例時應調用的基類構造函數

子類繼承基類,并重寫父類計算虛方法

classOperationAdd : Operation

{public override doubleGetResult()

{double result = 0;

result= NumberA +NumberB;returnresult;

}

}classOperationSub : Operation

{public override doubleGetResult()

{double result = 0;

result= NumberA -NumberB;returnresult;

}

}classOperationMul : Operation

{public override doubleGetResult()

{double result = 0;

result= NumberA *NumberB;returnresult;

}

}classOperationDiv : Operation

{public override doubleGetResult()

{double result = 0;if (NumberB != 0)

result= NumberA /NumberB;elseConsole.WriteLine("除數不能為零!\n");returnresult;

}

}

運算對象生產工廠

class OperationFactory //運算對象生產工廠

{public static Operation createOperation(stringoperation)

{

Operation oper= null;switch(operation)

{case "+":

{

oper= newOperationAdd();break;

}case "-":

{

oper= newOperationSub();break;

}case "*":

{

oper= newOperationMul();break;

}case "/":

{

oper= newOperationDiv();break;

}

}returnoper;

}

}

Main方法

classProgram

{static void Main(string[] args)

{

Operation oper;

Console.WriteLine("請輸入運算符:\r\n");

oper=OperationFactory.createOperation(Console.ReadLine());//調用簡單工廠類

Console.WriteLine("請輸入第一個數:\r\n");

oper.NumberA= int.Parse(Console.ReadLine());

Console.WriteLine("請輸入第二個數:\r\n");

oper.NumberB= int.Parse(Console.ReadLine());double result =oper.GetResult();

Console.WriteLine("運算結果:\r\n");

Console.WriteLine(oper.NumberA.ToString()+"+"+ oper.NumberB.ToString() + "=" +result.ToString());

Console.ReadLine();

}

簡單計算器的類圖

60116d9b77def40d18ff36a3ca497a72.png

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

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

相關文章

圖書管理系統 java 源碼_[源碼和文檔分享]基于C語言和SQL SERVER數據庫實現的圖書管理系統...

摘 要本文根據《數據庫應用系統設計》課程要求而做。選擇圖書館管理系統設計與開發是因為覺得圖書館管理系統對我們的幫助很大,并且經常去圖書館,對圖書館的大部分功能及流程還是比較了解,而且現在有些地方可能還不夠完善。這次課程設計目標是…

java useragent 360 遨游 火狐_各種瀏覽器UserAgent一覽表(桌面+移動)

桌面IE而IE各個版本典型的userAgent如下:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)其中&#x…

sql server 修改字段不能為空_SQL-SQL介紹

一SQL 介紹SQL(Structured Query Language),語義是結構化語言, 是一門 ANSI 的標準計算機語言,用來訪問和操作數據庫系統;二 數據庫介紹2.1 數據庫我們已經知道了SQL是操作數據庫的語言,那么數據庫是什么&a…

python 數組轉音頻_Python3+將2聲道音頻,分拆成1聲道

現在是將雙聲道的音頻分拆成單聲道的。同理可以將多聲道的音頻文件,轉為1聲道的音頻文件。注意新形成的音頻文件的rate,需要與原音頻的相同。import osimport waveimport numpy as npimport pyaudiofile1 os.path.join(os.path.abspath(os.path.dirname…

java定義一個矩陣的類_java寫入一個矩陣,如何編程求該矩陣的秩

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓Fraction.java如下:(這個是網上找來的,處理分數的類)// 支持查找功能的分數類class Fraction implements Comparable {// 分子private int numerator;// 分母private int denominator;// 默認構造函數public Fraction()…

python動態映射_Python Django框架url反向解析實現動態生成對應的url鏈接示例

本文實例講述了Python Django框架url反向解析實現動態生成對應的url鏈接。分享給大家供大家參考,具體如下:url反向解析:根據url路由規則,動態生成對應的url鏈接 (防止硬編碼)。url反向解析應用在兩個地方:模板中的超鏈接&#xff…

java標量替換_JAVA逃逸分析、棧上分配、標量替換、同步消除

一、逃逸分析逃逸分析是編譯語言中的一種優化分析,而不是一種優化的手段。通過對象的作用范圍的分析,為其他優化手段提供分析數據從而進行優化。逃逸分析包括:全局變量賦值逃逸方法返回值逃逸實例引用發生逃逸線程逃逸:賦值給類變量或可以在其…

python圖像人類檢測_OpenCV人類行為識別(3D卷積神經網絡)

1. 3D卷積神經網絡相比于2D 卷積神經網絡,3D卷積神經網絡更能很好的利用視頻中的時序信息。因此,其主要應用視頻、行為識別等領域居多。3D卷積神經網絡是將時間維度看成了第三維。人類行為識別的實際應用:安防監控。(檢測識別異常行為&#x…

Spring Cloud Feign作為HTTP客戶端調用遠程HTTP服務

如果你的項目使用了SpringCloud微服務技術,那么你就可以使用Feign來作為http客戶端來調用遠程的http服務。當然,如果你不想使用Feign作為http客戶端,也可以使用比如JDK原生的URLConnection、Apache的Http Client、Netty的異步HTTP Client或者Spring的RestTemplate。 那么,為…

java查看weblogic服務器_java判斷服務器是那種,例如區分tomcat和weblogic | 學步園

package com.geostar.query.util;import org.apache.log4j.Logger;/*** author likehua* 服務器類型探測* Date 2011/04/13* **/public class ServerUtil {public static final String GERONIMO_CLASS "/org/apache/geronimo/system/main/Daemon.class";public s…

拼接的option會多出空行_Word空格,空行,頁眉橫線等問題,我只花一分鐘就全解決了...

從網上復制下來的資料粘貼到Word文檔上,出現了許多空格、空行、頁眉橫線等問題,這時候我們該如何快速地解決這些問題,看看下面的操作你就知道了。一、刪除空格1、空格案例從網上復制下來的文字到Word文檔中,出現字與字之間有好多空…

基于java高校教師管理系統_基于SSM框架下的JAVA高校教師業務水平綜合管理系統...

每天記錄學習,每天會有好心情。*^_^*今天和一個朋友共同完成了一個高校教師業務水平綜合管理系統項目,我們在開發時選用的框架是SSM(MYECLIPSE)框架。我這個朋友知識有限,只會這個框架,哈哈,都是為了方便他。和往常一樣…

oracle連接工具_扯一扯Tableau軟件配置數據源系列之Oracle

作者:扯蛋君編輯:齊天大圣聲明:本文章僅用于Taleau軟件的應用、學習溝通,不代表Taleau公司;文中所示截圖來源Taleau官方及軟件公開內容,相應著作權歸Tableau所有。 今天給大家介紹Tableau工具如何連接數據庫…

在java中原始時間_Java 日期時間

Java 日期時間java.util包提供了Date類來封裝當前的日期和時間。 Date類提供兩個構造函數來實例化Date對象。第一個構造函數使用當前日期和時間來初始化對象。Date( )第二個構造函數接收一個參數,該參數是從1970年1月1日起的微秒數。Date(long millisec)Date對象創建…

如何和后臺接觸的_后臺產品,不只是做支持

最近在招聘后臺產品經理,面試過程中提到一個問題,這個問題之前也困擾了我很久:你做的后臺產品,價值體現在哪里?只是做業務支持么?今天就來聊聊這個話題。我是做后臺產品出身,最開始入行做的是云…

java手寫的html轉圖片格式_(Java實現)HTML轉JPG,TIFF等圖片格式和TIFF圖片合并功能解決方案。...

上一篇文章說到了HTML轉PDF的實現方式,而就在那個需求的另外一個方面,項目要求要實現頁面轉圖片的需求,主要是JPG,TIFF,PNG等格式。弄得我有點囧,上次一直沒搞定。也沒找到合適的工具進行轉換。前一小段時間…

云計算呼叫中心_干貨|云呼叫中心系統和傳統呼叫中心系統的區別在哪?

隨著社會的發展,呼叫中心由傳統的呼叫中心逐漸發展為云呼叫中心。然而關于這兩者的區別,您知道嗎?跟隨暢遠技術一同來了解一下吧......一、購買、安裝不同傳統呼叫中心軟件在配置方面有幾個特點:一次購買終身使用;安裝…

java從鍵盤為數組賦值,java給數組賦值

java 動態數組賦值,java對象數組詳解,java二維數組賦值,java給數組賦值java數組動態賦值,從零學java筆錄-第24篇 圖解一維數組在內存中,java二維數組賦值,java給數組賦值java 數組動態賦值,從零學java筆錄-第24篇 圖解一維數組在內存中,java二維數組賦值,java給數組賦值數組的基…

隔一段時間查找一次 golang_劍指 offer-04 二維數組中的查找

算法名稱:二維數組中的查找題目內容:在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該…

decorator php,php設計模式 Decorator(裝飾模式)

/*** 裝飾模式** 動態的給一個對象添加一些額外的職責,就擴展功能而言比生成子類方式更為靈活*/header("Content-type:text/html;charsetutf-8");abstract class MessageBoardHandler{public function __construct(){}abstract public function filter($msg);}class …