可以为抽象类实例化:
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类中就相当与定义了一个模版,在主方法中调用时,调用的就是普通方法,而子类只需要实现父类中的抽象方法,就可以取得一个具体的信息