抽象类的实际应用--模版设计

可以为抽象类实例化:

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

posted on 2011-12-07 10:44  wangbokun  阅读(234)  评论(0编辑  收藏  举报

导航