Java學習:用接口簡單實現銀行卡系統

2020-12-13 亦楓博客

用前面所知案例,簡單實現一個銀行卡系統。涉及的Java知識有:

interface(接口),abstract(抽象修飾符),extends(繼承),implements(接口的實現),@Override(重寫)

案例具體要求:

要求實現銀行卡系統的銀聯接口

銀聯接口,用於描述銀聯統一制定的規則,該接口提供檢測密碼方法、取錢方法以及查詢餘額方法。工商銀行接口,用於描述工商銀行發行的卡片功能,在滿足銀聯接口的規則基礎上,增加了在線支付功能。農業銀行接口,用於描述中國農業銀行發行的卡片功能,在滿足銀聯接口的規則基礎上,增加了支付電話費的功能。另外,農行的卡的卡內餘額,允許最多透支2000。實現工商銀行接口和農業銀行接口,並進行測試。

代碼如下:

package cn.oopinterface.atm;/** * 銀聯接口,用於描述銀聯統一制定的規則,該接口提供檢測密碼方法、取錢方法以及查詢餘額方法。 * @author yflad-F */publicinterfaceUnion{//檢測密碼方法, 密碼為boolean類型publicabstractboolean checkPassword(int password);//取錢方法publicabstractboolean takeMoney(double money);//查詢餘額方法publicabstractdouble balance();}

package cn.oopinterface.atm;/** * 2. 工商銀行接口,用於描述工商銀行發行的卡片功能,在滿足銀聯接口的規則基礎上,增加了在線支付功能。 * @author yflad-F */publicinterface ICBC extendsUnion{//在線支付publicabstractboolean onlinPay(double money);}

package cn.oopinterface.atm;/** * 3. 農業銀行接口,用於描述中國農業銀行發行的卡片功能,在滿足銀聯接口的規則基礎上, * 增加了支付電話費的功能。另外,農行的卡的卡內餘額,允許最多透支2000。 * @author yflad-F */publicinterface ABC extendsUnion{//電話費publicabstractboolean phonePay(String tellno,double money);//信用額度publicabstractboolean credit(double money);}

接口的實現

package cn.oopinterface.atm;/** * 工商銀行的實現類 * @author yflad-F */publicclassICBCImplimplements ICBC{double money=2000;//卡裡的本金@Overridepublicboolean checkPassword(int password){//檢測密碼方法if(password==123456){returntrue;}returnfalse;}@Overridepublicboolean takeMoney(double money){//取錢方法//取出來的錢應該小於等於本金if(this.money>=money){this.money-=money;returntrue;}returnfalse;}@Overridepublicdouble balance(){//查詢餘額方法return money;}@Overridepublicboolean onlinPay(double money){//在線支付// 支付的金額應該小於等於剩餘的錢if(this.money>=money){this.money-=money;returntrue;}returnfalse;}}

package cn.oopinterface.atm;/** * 農業銀行的實現類 * @author yflad-F */publicclassABCImplimplements ABC{double money =2000;@Overridepublicboolean checkPassword(int password){//檢測密碼方法if(password==123456){returntrue;}returnfalse;}@Overridepublicboolean takeMoney(double money){//取錢方法//取出來的錢應該小於等於本金if(this.money+2000>=money){this.money-=money;returntrue;}returnfalse;}@Overridepublicdouble balance(){//查詢餘額方法return money;}@Overridepublicboolean phonePay(String tellno,double money){//電話費if(this.money+2000>=money){this.money-=money;returntrue;}else{System.out.println("電話號碼錯誤!請重新輸入:");}returnfalse;}@Overridepublicboolean credit(double money){//信用額度if(this.money+2000>=money){this.money-=money;returntrue;}returnfalse;}}

測試

package cn.oopinterface.atm;importjava.util.Scanner;/** * 工商銀行測試 * @author yflad-F */publicclassICBCTest{publicstaticvoid main(String[] args){ ICBC icbc =newICBCImpl();Scanner sc =newScanner(System.in);for(int i =1; i <=3; i++){System.out.println("請輸入銀行卡密碼:");int pwd = sc.nextInt();if(icbc.checkPassword(pwd)){while(true){System.out.println("1.查詢餘額 2.取出金額 3.在線支付 4.退出系統");int type = sc.nextInt();if(type ==1){System.out.println("餘額:"+icbc.balance()+" 元");}if(type ==2){System.out.println("請輸入你要取出的金額:");double m=sc.nextDouble();if(icbc.takeMoney(m)){System.out.println("提現成功!");System.out.println("餘額為:"+icbc.balance());}else{System.out.println("餘額不足!");}}if(type ==3){System.out.println("請輸入你要付款的金額:");double m=sc.nextDouble();if(icbc.onlinPay(m)){System.out.println("付款成功!");System.out.println("餘額為:"+icbc.balance()+" 元");}else{System.out.println("餘額不足!");}}if(type ==4){System.out.println("退出系統成功!");break;}}break;}else{if(i ==3){System.out.println("密碼錯誤次數超過三次,卡已鎖定!");break;}System.out.println("密碼錯誤,請重新輸入!");}}}}

package cn.oopinterface.atm;importjava.util.Scanner;/** * 農業銀行測試 * @author yflad-F */publicclassABCTest{publicstaticvoid main(String[] args){ ABC abc =newABCImpl();Scanner sc =newScanner(System.in);for(int i =1; i <=3; i++){System.out.println("請輸入銀行卡密碼:");int pwd = sc.nextInt();if(abc.checkPassword(pwd)){while(true){System.out.println("1.查詢餘額 2.取出金額 3.繳電話費 4.退出系統");int type = sc.nextInt();if(type ==1){System.out.println("餘額:"+ abc.balance()+" 元");}if(type ==2){System.out.println("請輸入你要取出的金額:");double m = sc.nextDouble();if(abc.takeMoney(m)){System.out.println("提現成功!");System.out.println("餘額為:"+ abc.balance());}else{System.out.println("餘額不足!");}}if(type ==3){System.out.println("請輸入你要充值的號碼:");String phone = sc.next();// 判斷電話號碼長度是否為11位if(phone.length()==11){// 進入到這說明可以充值System.out.println("請輸入充值金額:");double money = sc.nextDouble();if(abc.phonePay(phone, money)){System.out.println("支付成功!");System.out.println("餘額為:"+ abc.balance());}else{System.out.println("餘額不足!");}break;}else{}System.out.println("電話號碼錯誤,請重新繳費!");}if(type ==4){System.out.println("退出系統成功!");break;}}break;}else{if(i ==3){System.out.println("密碼錯誤次數超過三次,卡已鎖定!");break;}System.out.println("密碼錯誤,請重新輸入!");}}}}

相關焦點

  • Java接口interface、抽象類abstract,逐步學習怎麼封裝對象
    Java基礎之多態,動態綁定多態的代碼案例,簡單卻很重要)中說到了繼承和多態,這裡不得不提一下java以下的一個java接口的例子是類實現了Comparatble接口,這個接口代表了具有進行比較的能力,任何類實現了Comparable接口,這個類就具有了比較對象的能力,也就能進行排序操作。
  • Java 如何實現動態腳本?
    本文分享了一種 Java 動態腳本實現方案,給出了其中的關鍵技術點,並就類重名問題、生命周期、安全問題等做出進一步討論,歡迎同學們共同交流。文末福利:Java 學習路線。繁星是一個數據服務平臺,其核心功能是:用戶配置一段 SQL,繁星產出對應的 HSF/TR/SOA/Http 取數接口。一次查詢請求經過引擎的管道,被各個閥門處理後就得到了相應的結果數據。
  • 實現多線程的標準操作,基於Runnable接口實現java多線程
    1 為什麼要用Runnable上一篇文章介紹了通過繼承Thread類,實現java多線程。但如果當我們創建的這個線程類還想繼承其他類的時候,這種方法就略顯局限了。這也是java單繼承的局限性。為了避免這種局限性,所以又提供了第二種多線程主體定義的形式:實現Runnable接口。
  • java面試題總結:java的接口類和抽象類的特點
    java中接口的特點:1.接口中定義的方法都需要實現類來實現,如果實現類不能實現接口中的所有方法,則實現類需要定義為抽象類6. 靜態方法不能被子類重寫(覆蓋),因此接口中不定聲明靜態方法7. 使用接口可以實現多繼承接口和抽象類的區別之處:1. 接口中所有的方法隱含都是抽象的,而抽象類則可以同時包含抽象和非抽象的方法2.
  • Java基礎教程:Java基礎知識之List接口
    List接口我們掌握了Collection接口的使用後,再來看看Collection接口中的子類,他們都具備那些特性呢?接下來,我們一起學習Collection中的常用幾個子類(java.util.List集合、java.util.Set集合)。
  • 跟我學java編程—Set接口實現類TreeSet
    前面兩節分別介紹了Set接口的實現類HashSet和LinkedHashSet類。本節介紹TreeSet類。待加入的元素如何實現compareTo方法呢?Java提供了一個Comparable接口,該接口定義了一個compareTo(Object o)方法,用於比較兩個元素的大小,並返回一個整數值。需要加入TreeSet集合的元素必須要實現該接口,該接口的實現代碼用於比較當前元素與傳入元素的大小進行比較,並返回結果。因此實現該接口類的對象就可以比較大小。
  • 做彩票系統源碼開發用php和java兩個語言間的區別
    彩票行業進入我國已經幾十年了,隨著時間的沉澱,也是發展起來了,也有投資者看中了彩票行業的前景想要做彩票系統源碼開發,而像是php與java是目前非常主流的兩個語言,對於系統開發也是需要做選擇的,且也是經常會在開發web應用時發生分歧,開發前很多外包團隊肯定會問你,是用java開發還是
  • Java抽象類與接口的區別
    在討論它們之間的不同點之前,我們先看看抽象類、接口各自的特性。抽象類抽象類是用來捕捉子類的通用特性的 。它不能被實例化,只能被用作子類的超類。抽象類是被用來創建繼承層級裡子類的模板。如果一個類實現了某個接口,那麼它就繼承了這個接口的抽象方法。這就像契約模式,如果實現了這個接口,那麼就必須確保使用這些方法。接口只是一種形式,接口自身不能做任何事情。
  • 可能是把 Java 接口講得最通俗的一篇文章
    接口中定義靜態方法的目的是為了提供一種簡單的機制,使我們不必創建對象就能調用方法,從而提高接口的競爭力。4)接口中允許定義 default 方法也是從 Java 8 開始的,比如說 printDescription(),它始終由一個代碼塊組成,為實現該接口而不覆蓋該方法的類提供默認實現,也就是說,無法直接使用一個「;」號來結束默認方法——編譯器會報錯的。
  • 給Java新手的一些建議——Java知識點歸納(Java基礎部分)
    Java的運行(基礎必備)這條可能出看很簡單,java程序的運行誰不會呢?不過很多時候, 我們只是單純通過IDE去執行java程序,底層IDE又是如何執行java程序呢?很多人並不了解。這個知識點是最最基本的java開發者需要掌握的,初學java,第一個肯定是教你如何在命令行中執行java程序,但是很多人一旦把java學完了,IDE用上了,就把這個都忘了。
  • Java之線程池的簡單介紹
    各位小夥伴們大家好,這次小編要簡單介紹一下Java中的線程池。在之前小編介紹線程的時候,如果我們使用線程的時候,就可以去創建一個線程,那樣實現起來就非常簡單,但是如果並發地線程數量很多,並且每一個線程都是執行一個時間很短的任務就結束了,這樣頻繁創建線程就會大大降低系統的效率,頻繁創建和銷毀線程需要時間。
  • Java之抽象方法的使用與及接口中抽象方法的簡單介紹
    public interface 接口名稱{//接口內容}備註:換成關鍵字interface之後,編譯生成的字節碼文件仍然是:.java-->.class接口中包含的內容有接口當中抽象方法的使用步驟,代碼如下:public class MyInterfaceImpl implements MyInterfaceAbstract{//定義一個實現類@Override//覆蓋重寫public
  • Java基礎面試題簡單總結
    接口的實現與子類相似,除了該實現類不能從接口定義中繼承行為。當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然後,它可以在實現了該接口的類的任何對象上調用接口的方法。由於有抽象類,它允許使用接口名作為引用變量的類型。通常的動態聯編將生效。
  • Javaweb開發學習路線及Java三大框架分享
    學習目標:Java程式設計師1: 熟悉jdk,jvm,eclipse,安裝於配置jdk2:熟悉並掌握java的基礎語法,類,抽象類,接口,內部類等概念3: java核心編程,如輸入輸出流,多線程,集合,XML,正則表達式等4:java
  • JavaSE基礎知識學習---抽象類和接口
    ,也必須用abstract修飾類,4.如果子類繼承了抽象類,並且全部重寫了父類抽象方法,則該子類就可以被實例化。,道理也很簡單。這就是一個接口,只是說接口沒有太多說的,主要是接口有什麼用,java為什麼會提供這麼一個東西,接口在JAVAEE中使用很多,例如Mybatis基於接口的mapper開發。JavaEE三層模式開發都會大量使用接口。下面主要學習接口的應用。
  • 在Java 中安全使用接口引用
    接口隔離原則軟體編程中始終都有一些好的編程規範值得我們的學習:如果你在一個多人協作的團隊工作,那麼模塊之間的依賴關係就應該建立在接口上,這是降低耦合的最佳方式;如果你是一個SDK 的提供者,暴露給客戶端的始終應該是接口,而不是某個具體實現類。
  • Java類隔離加載實現原理是什麼?
    Java類隔離加載實現原理是什麼? JVM 提供一個全局類加載器的設置接口,直接替換全局類加載器,但無法解決多個自定義類加載器同時存在的問題。然而JVM會選擇當前類的類加載器來加載所有該類的引用的類。類隔離技術是什麼?
  • 跟我學java編程—List接口實現類ArrayList
    前面三節介紹了Set接口的實現類HashSet、LinkedHashSet、TreeSet的基本用法,Set集合接口提供了存儲元素與Key的映射關係,可以通過Key去快速查找到對應的元素。從本節開始介紹List接口的實現類,List集合接口提供了元素的有序排列,List 接口的實現類在實現插入元素時,都會根據索引進行排列。
  • Java並發包下鎖學習第一篇:介紹及學習安排
    Java並發包下鎖學習第一篇:介紹及學習安排在Java並發編程中,實現鎖的方式有兩種,分別是:可以使用同步鎖(synchronized關鍵字的鎖),還有lock接口下的鎖。本篇是《凱哥(凱哥Java:kagejava)並發編程學習》系列之《Lock系列》教程的第一篇:《Java並發包下鎖學習第一篇》本文主要內容:java中鎖定義及在jdk5以後的並發包(JUC)下鎖相關的類及類關係圖;怎麼學習JUC下鎖凱哥講解一般步驟:先舉生活中的例子,然後從例子中總結
  • 用語法樹動態生成java代碼(生成接口實現類)例子
    testCompile() throws Exception { CompilationUnit cu = new CompilationUnit(); // 設置包名 cu.setPackage(new PackageDeclaration(ASTHelper.createNameExpr("yp.published.grammer"))); // 設置類名,DataTesterImpl,並且實現