Java abstract 理解和學習
阿新 • • 發佈:2018-11-09
/** * <html> * <body> * <P> Copyright JasonInternational Since 1994 https://github.com/Jasonandy/Spring-Core</p> * <p> All rights reserved.</p> * <p> Created on 2018年</p> * <p> Created by Jason </p> * </body> * </html>*/ package cn.ucaner.core.absinf; /** * @Package:cn.ucaner.core.absinf * @ClassName:AbsInfDemo * @Description: <p> AbsInfDemo - 介面和抽象類的學習 {@link https://www.cnblogs.com/danbing/p/5035189.html} * * 最近學習Spring的原始碼 仿Spring實現 * 裡面用到大量的抽象類和介面 概念比較模糊 故整理出來學習 * * 一.抽象類 * 1、抽象類 * 1).包含一個抽象方法的類就是抽象類 * 2、抽象方法 * 1).宣告而未被實現的方法,抽象方法必須使用abstract關鍵詞字宣告 * 3、抽象類被子類繼承,子類(如果不是抽象類)必須重寫抽象類中的所有抽象方法 * 4、抽象類不能被直接例項化,要通過其子類進行例項化 * 5、只要包含一個抽象方法的抽象類,該方法必須要定義成抽象類,不管是否還包含有其他方法 * 6、子類中的抽象方法不能與父類的抽象方法同名 * 7、abstract不能與final並列修飾同一個類 * 8、abstract 不能與private、static、final或native並列修飾同一個方法 * * * * *https://www.cnblogs.com/GreatKing/p/6077912.html * 什麼時候使用介面,什麼時候使用抽象類? * 1.如果你想擁有一些方法,並且這些方法有預設實現,那麼久使用抽象類 * 2.如果你想實現多繼承,那麼就是用介面吧,java不支援多繼承,但是可以實現多個介面 * 3.介面主要用於模組與模組之間的呼叫 * 4.抽象類主要用於當做基礎類使用,即基類 * * consider: {@code cn.ucaner.alpaca.framework.utils.tools} * * @see https://github.com/Jasonandy/alpaca可以參考alpaca common裡的tools裡面的程式碼規範. * * </p> * @Author: - Jason * @CreatTime:2018年6月2日 上午11:02:18 * @Modify By: * @ModifyTime: 2018年6月2日 * @Modify marker: * @version V1.0 */ public class AbsInf { }
/** * <html> * <body> * <P> Copyright JasonInternational Since 1994 https://github.com/Jasonandy/Spring-Core</p> * <p> All rights reserved.</p> * <p> Created on 2018年</p> * <p> Created by Jason </p> * </body> * </html> */ package cn.ucaner.core.absinf.abs; /** * @Package:cn.ucaner.core.absinf * @ClassName:Printer * @Description: <p> Printer 列印的抽象類 - 介面是抽象類的形式. * https://www.cnblogs.com/beanmoon/archive/2012/12/06/2805221.html * </p> * @Author: - Jason * @CreatTime:2018年6月2日 上午11:10:08 * @Modify By: * @ModifyTime: 2018年6月2日 * @Modify marker: * @version V1.0 */ public abstract class Printer { public void open() { System.out.println("Printer Open."); } public void close() { System.out.println("Printer Closed."); } /** * @Description: 抽象方法 - print - 子類必須實現 * @Autor: Jason - [email protected] */ abstract void print(); }
/** * <html> * <body> * <P> Copyright JasonInternational Since 1994 https://github.com/Jasonandy/Spring-Core</p> * <p> All rights reserved.</p> * <p> Created on 2018年</p> * <p> Created by Jason </p> * </body> * </html> */ package cn.ucaner.core.absinf.abs; /** * @Package:cn.ucaner.core.absinf * @ClassName:HPPrinter * @Description: <p> HP extends Printer NOT implement </p> * @Author: - Jason * @CreatTime:2018年6月2日 上午11:15:03 * @Modify By: * @ModifyTime: 2018年6月2日 * @Modify marker: * @version V1.0 */ public class HPPrinter extends Printer{ @Override void print() { System.out.println("Hello , I'm HP Printer."); } public static void main(String[] args) { Printer p = new HPPrinter(); p.open(); p.print(); p.close(); } } //Outputs //Printer Open. //Hello , I'm HP Printer. //Printer Closed.
/** * <html> * <body> * <P> Copyright JasonInternational Since 1994 https://github.com/Jasonandy/Spring-Core</p> * <p> All rights reserved.</p> * <p> Created on 2018年</p> * <p> Created by Jason </p> * </body> * </html> */ package cn.ucaner.core.absinf.abs; /** * @Package:cn.ucaner.core.absinf * @ClassName:EpsonPrinter * @Description: <p> Epson </p> * @Author: - Jason * @CreatTime:2018年6月2日 上午11:17:29 * @Modify By: * @ModifyTime: 2018年6月2日 * @Modify marker: * @version V1.0 */ public class EpsonPrinter extends Printer{ @Override void print() { System.out.println("Hi , I'm Epson Printer."); } public static void main(String[] args) { Printer p = new EpsonPrinter(); p.open(); p.print(); p.close(); } } //Outputs //Printer Open. //Hi , I'm Epson Printer. //Printer Closed.