Java面向對象編程_抽象類與接口——抽象類的實現(正常模式和非正常模式)

1. 抽象類的實現(正常模式)

正常開發中的標準操作

package day07;
/*
 *  抽象類的實現:
 *      1. 所有的抽象類必須有子類
 *      2. 抽象類的子類必須覆寫抽象類的所有抽象方法(子類不能是抽象類)
 *      3. 抽象類的對象通過對象的多態性的子類去實例化的
 *      4. private和abstract不能同時使用
 *
 *  抽象方法的使用規則:
 *      1. 類必須是抽象類,聲明前加上abstract
 *      2. 抽象方法在聲明前也要加上關鍵字abstract
 *      3. 抽象方法只聲明不實現(即沒有方法體)
 */

// 正常模式
public class Test{

    public static void main(String[] args){
        Person per = new Student(); // 實例化子類,向上轉型
        per.getPersonInfo(); // 被子類所覆寫的抽象方法
    }
}

// 抽象類
abstract class Person {

    private String name;

    public String getName(){
        return this.name;
    }

    public void setName(String name){
        this.name = name;
    }

    public abstract void getPersonInfo(); // 抽象方法
}

// 子類

class Student extends Person{
    public void getPersonInfo(){
        System.out.println("I am a Student");
    }
}

2. 抽象類的實現(非正常模式)

封裝具體子類,開發時不首選

package day07;
/*
 *  抽象類的實現:
 *      1. 所有的抽象類必須有子類
 *      2. 抽象類的子類必須覆寫抽象類的所有抽象方法(子類不能是抽象類)
 *      3. 抽象類的對象通過對象的多態性的子類去實例化的
 *      4. private和abstract不能同時使用
 *
 *  抽象方法的使用規則:
 *      1. 類必須是抽象類,聲明前加上abstract
 *      2. 抽象方法在聲明前也要加上關鍵字abstract
 *      3. 抽象方法只聲明不實現(即沒有方法體)
 */

public class Test{

    public static void main(String[] args){
        Person per = Person.getInstance() ;
        per.getPersonInfo(); // 被子類所覆寫的抽象方法
    }
}

// 抽象類
abstract class Person {

    private String name;

    public String getName(){
        return this.name;
    }

    public void setName(String name){
        this.name = name;
    }

    public abstract void getPersonInfo(); // 抽象方法
    
    public static Person getInstance() {  // 取得A類的對象

        class Student extends Person{
            public void getPersonInfo(){
                System.out.println("I am a Student");
            }
        }
        return new Student();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章