抽象類的構造函數


  1. 抽象類是不能被實例化的,

    package com.learn;
    
    public abstract class AbstractPerson {
        
        public static void main(String[] args) {
            new AbstractPerson();
        }
    }
    
    //Error: java: com.learn.AbstractPerson是抽象的; 無法實例化執行
    
  2. 抽象類構造函數的修飾符為public

    //抽象類
    package com.learn;
    
    public abstract class AbstractPerson {
    
        public AbstractPerson(){
            System.out.println("AbstractPerson構造函數");
        }
    }
    
    //抽象類的繼承類
    package com.learn;
    
    public class Person extends AbstractPerson{
    
        public Person(){
            System.out.println("Person構造函數");
        }
    
        public static void main(String[] args) {
            new Person();
        }
    }
    
    //運行結果
    AbstractPerson構造函數
    Person構造函數
    

    這說明抽象類可以有構造函數,只是不能被實例化。

  3. 抽象類構造函數的修飾符為protected

    //抽象類
    package com.learn;
    
    public abstract class AbstractPerson {
    
        //修改為protected
        protected AbstractPerson(){
            System.out.println("AbstractPerson構造函數");
        }
    }
    //運行結果
    AbstractPerson構造函數
    Person構造函數
    

    結果和使用public時相同,說明這兩種修飾符並沒有區別。

  4. 思考
    為什么jdk中都使用的是protected,而不使用public?
    1) protected表示只能繼承的類可以使用,public表示所有類都可以使用。
    2) 抽象類的構造函數只能被繼承類調用,這和protected的含義相同,因此用protected來修飾,但從編譯和運行的角度並沒有差別。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM