Java语言入门教程(十二):Java语言中继承之基本概念

 

     从教程(十)开始,已经从学习单个类的基本语法,转到了学习多个类之间的关系。教程(十)中,学习了类与类长间的两种关系,关联和依赖。为了维护1对多的关系,在教程(十一)中,学习了数组。除了关联和依赖,类与类还有一种非常重要且常见的关系,就是继承。本文将介绍继承的概念、作用、使用场景等。

       假设有这样一个简单需求(其实谈不上是需求,仅仅为了初学者容易理解而编造):某培训中心要开发一个内部员工管理系统。该培训中心目前有两个部门,技术资源部和业务部。技术资源部的员工负责讲课,称为讲师。业务部员工负责联系洽谈业务,称为销售。在管理系统中,需要管理的是所有员工的姓名、薪水,以及讲师的技术方向,销售的任务量。…..

       对上述简单描述,让我们分析一下,该培训中心的系统中,主要管理的对象是什么?不难看出,主要是两种员工,即讲师和销售。讲师和销售有不同之处,如讲师有授课方向属性,销售有任务量属性,二者还有很多相同之处,比如都需要管理其名字,薪水。也就是说,如果我们创建两个类,Trainer类,Sales类,那么这两个类中一定有相同的部分。面向对象编程的一大目标就是重复使用,我们如何能让多个类中相同的部分能重复使用哪?就可以借助继承这一特性来完成。可以说,继承的主要目的是为了重复使用。我们可以把多个类中相同的部分抽取出来,放到一个类中,这个类叫父类,或者超级类,其他的类可以继承这个类,从而重用该类中的属性和方法,这些类叫子类,或者衍生类。在Java语言中,继承使用extends关键字完成。

       接下来,我们使用代码,把培训中心的员工类进行展现。

       package com.csst.inherit;

 

public class Employee {

    private String name;

    private double salary;

    public Employee() {

      

    }

    public Employee(String name, double salary) {

       super();

       this.name = name;

       this.salary = salary;

    }

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public double getSalary() {

       return salary;

    }

    public void setSalary(double salary) {

       this.salary = salary;

    }

}

 

package com.csst.inherit;

 

public class Trainer extends Employee {

       private String course;

      

       public Trainer() {

       }

 

       public Trainer(String name, double salary, String course) {

              super(name, salary);

              this.course = course;

       }

 

       public String getCourse() {

              return course;

       }

 

       public void setCourse(String course) {

              this.course = course;

       }

      

      

}

 

package com.csst.inherit;

 

public class Sales extends Employee {

       private double task;

      

      

       public Sales() {

              super();

       }

 

       public Sales(String name, double salary, double task) {

              super(name, salary);

              this.task = task;

       }

 

       public double getTask() {

              return task;

       }

 

       public void setTask(double task) {

              this.task = task;

       }

                    

}

 

package com.csst.inherit;

 

public class TestEmployee {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

       // TODO Auto-generated method stub

       Sales sale=new Sales("Kate",3000,100000);

       System.out.println("sale.name : "+sale.getName()+" sale.salary : "+sale.getSalary()+" sale.task: "+sale.getTask());

       Trainer trainer=new Trainer("Rose",3000,"Java");

       System.out.println("trainer.name: "+trainer.getName()+" tainer.salary: "+trainer.getSalary()+" trainer.course: "+trainer.getCourse());

    }

}

运行结果为:

sale.name : Kate sale.salary : 3000.0 sale.task: 100000.0

trainer.name: Rose tainer.salary: 3000.0 trainer.course: Java

 

       以上代码中,Employee是父类,TrainerSales是子类,通过extends继承了Employee。因为继承了Employee,所以TrainerSales可以重复使用Employee中的方法,如getName,getSalary,当然,需要注意权限问题。

       继承是“is-a”关系,即子类对象都是父类类型的对象。如Trainer的对象可以说是一个Employee类型对象。在Java语言中,一定要记住的是:Java中是单继承,即一个类只能继承一个父类。

       继承中还有很多其他的细节,如方法覆盖,构造方法,抽象类,多态参数等,在后续教程中,将逐一介绍。

      

       绝对原创,转载请注明出处!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值