单继承(single inheritance)

在面向对象一章中我们学习了OO的特征之一:继承,我们已知,任何面向对象的语言必然实现了继承这一特性,java也不例外,但是,我们应该注意的是,java和某些面向对象语言(如c++)在实现继承的不同之处在于java只支持单继承,不支持多重继承。
即,java中一个类只能继承于另一个类。我们将被继承的类称之为父类(基类),继承类称之为子类(派生类)。在java中用关键字extends来实现单继承,语法如下:
    class subclass extends superclass{...}
在前面所讲已知,实现继承关系的类之间有着必然的联系,不能将不相关的类实现继承,就象人类不能继承于鸟类!
那怎么去判断类和类之间是否有着必然联系呢?实际上,在第一章里面,我们已知当某类A和类B之间有着共同的属性和行为时,那么类A和类B之间就可能是继承关系或者有着共同的父类。
下面,假设我们开发某公司的员工管理系统,已知类Manager和类Employee,代码如下:        
    class Employee
        {
            public String f_name;
            public String l_name;
            public float salary = 0.0f;

            public String getEmpDetails()
            {....}
        }

        class Manager
        {
            public String f_name;
            public String l_name;
            public float salary;
            public String dept;

            public String getEmpDetails()
            {....}
        }
通过分析得知,在类Employee和类Manager中存在许多共同的属性和行为,在现实生活中,Manager是公司Employee之一,因此,我们可以将Manager类定义成Employee类的子类,修改类Manager如下:
        class Manager extends Employee
        {
            public String dept;

            public String getEmpDetails()
            {
                return "This is Manager!";
            }
        }
UML中类图表示为:

 

大家可能会质疑:Manager类重新定义后,原有的属性减少了(f_name,f_name,salary),岂不是违背了需求?!
当类A继承于类B时,子类A拥有父类B的所有成员变量和方法,换句话说,子类继承了父类的所有成员属性和方法,在父类中已定义的属性和方法,在子类中可以无需定义(除非方法覆盖)。
所以,在子类Manager中已继承了父类Employee中的属性和方法,无需再定义在父类中已有的属性(f_name,f_name,salary)。
好,我们已经学会了基本的继承语法,下面就来探讨一下继承带来的一些好处:
a.减少代码冗余
从上面的例子就可以看出,类Manager通过继承而无需再定义属性(f_name,f_name,salary),从而减少了代码量,试想一下,当公司员工分为许多不同级别员工时(如定义秘书、工程师、CEO等员工类),如果没有继承,那将是怎样的结果?
b.维护变得简单
假设公司要求给所有员工添加生日这一属性,那么,在没有继承时,我们的维护将变得困难(需修改每一个级别的员工类)。
c.扩展变得容易
当一个新的级别员工类需创建时,我们只需将该类继承所有员工父类Employee,接着再定义属于该员工的特有属性即可。
当然,以上所举例子只是继承带来的好处的部分体现,在下面的学习中我们将逐渐深入体会继承带来的优势。
小测试:以下代码是否正确?
        class B{...}
        class C{...}
        class D{...}
        class A extends B,C,D
        {.....}
java中一个类只能继承一个类,但一个类可以被多个类所继承。如:
        class Engineer extends Employee
        {...}
        class Secretary extends Employee
        {...}
        class Manager extends Employee
        {
            public String dept;
            ...
        }
以上三个不同类分别继承了Employee类,即三个类拥有从父类继承过来的共同属性和方法。但是,请注意:这仍旧是单继承!以UML类图表示为:

提醒:构造方法不能被继承!一个类得到构造构造方法只有两种途径:自定义构造方法;使用JVM分配的缺省构造方法。但是,可以在子类中访问父类的构造方法,后面我们会深入。

更多Java视频教程

 

转载于:https://www.cnblogs.com/JAVA-itjob/archive/2012/02/28/2371715.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值