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