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();
}
}