可以为抽象类实例化:
package test1;abstract class Person { // 抽象类 Personprivate String name; // 封装属性nameprivate int age;// 封装属性agepublic 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类中就相当与定义了一个模版,在主方法中调用时,调用的就是普通方法,而子类只需要实现父类中的抽象方法,就可以取得一个具体的信息