抽象类的实际应用--模版设计
可以为抽象类实例化:
package test1; abstract class Person { // 抽象类 Person private String name; // 封装属性name private int age;// 封装属性age public Person(String name, int age) {// 构造函数 Person----方法名和类名一致 this.name = name;// 为name赋值 this.age = age;// 为age赋值 } public String getName() {// 取得name属性的内容 return name; } // public void setName(String name) { // this.name = name; // } public int getAge() {// 取得age属性的内容 return age; } // public void setAge(int age) { // this.age = age; // } public void say() { // 定义普通方法 System.out.println(this.getContent()); } public abstract String getContent();// 说话的内容由子类决定 } class Student extends Person {//定义S 类继承P 类 private float score; //封装一个属性 public Student(String name, int age, float score) { super(name, age); //调用父类的构造方法 this.score = score; } public String getContent() {//覆写父类中的抽象方法 return "学生信息--》姓名:" + super.getName() + ":年龄:" + super.getAge() + ";成绩:" + this.score; } } class Worker extends Person { private float salary; public Worker(String name, int age, float salary) { super(name, age); this.salary = salary; } public String getContent() { return "工人信息--》姓名:" + super.getName() + ":年龄:" + super.getAge() + ":工资:" + this.salary; } } public class AbstractCaseDemo02 { public static void main(String[] args) { Person per1 = null; Person per2 = null; per1 = new Student("张三", 20, 99.0f); per2 = new Worker("李四", 30, 3000.0f); per1.say(); per2.say(); } }
结果:
学生信息--》姓名:张三:年龄:20;成绩:99.0
工人信息--》姓名:李四:年龄:30:工资:3000.0
在Person类中就相当与定义了一个模版,在主方法中调用时,调用的就是普通方法,而子类只需要实现父类中的抽象方法,就可以取得一个具体的信息