抽象类的应用-定义模板

问题定义:假设人分为学生和工人,学生和工人都可以说话,但是学生和工人说话的内容是不一样的,也就是说说话这个功能应该是一个具体功能,而说话的内容就要由学生或工人来决定了。可以使用抽象类来实现这个功能。
abstract class Person{  //定义一个抽象类Person
    private String name; //name属性
    private int age;     //age属性

    public Person(String name, int age){ //构造方法
        this.setName(name);
        this.setAge(age);
    }

    public void setName(String name){
        this.name = name;
    }

    public String getName(){
        return this.name;
    }

    public void setAge(int age){
        this.age =age;
    }

    public int getAge(){
        return this.age;
    }

    public void say(){ //说话方法
        System.out.println(this.getContext());
    }

    public abstract String getContext();//返回人说话内容的方法,具体由子类来实现
};

class Student extends Person{ //学生类继承Person类,并且实现getContext方法
    private float score;
    public Student(String name,int age,float score){
        super(name,age);
        setScore(score);
    }

    public void setScore(float score){
        this.score = score;
    }

    public float getScore(){
        return this.score;
    }

    public String getContext(){ //实现getContext方法
        return "name = " + super.getName() + ", age = " + super.getAge() + ", score = " + this.getScore();
    }
};

class Worker extends Person{ //工人类实现Person类,并且实现getContext方法
    private float salary;
    public Worker(String name,int age,float salary){
        super(name,age);
        setSalary(salary);
    }

    public void setSalary(float salary){
        this.salary = salary;
    }

    public float getSalary(){
        return this.salary;
    }

    public String getContext(){
        return "name = " + super.getName() + ", age = " + super.getAge() + ", salary = " + this.getSalary();
    }
};

public class AbstractCaseDemo02{
    public static void main(String agrs[]){
        Person per1 = null;
        Person per2 = null;
        per1 = new Student("Tom",20,98.0f);//定义学生对象
        per2 = new Worker("Jay",34,5600.0f);//定义工人对象
        per1.say();
        per2.say();
    }
};
输出结果:
name = Tom, age = 20, score = 98.0
name = Jay, age = 34, salary = 5600.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值