1. 程式人生 > >Java abstract 理解和學習

Java abstract 理解和學習

/**
 * <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.