1.继承的概念与实现
继承是面向对象程序设计思想最重要的一个特性,通过继承有效建立程序结构,明确类之间的关系,增强程序的可扩充性和可维护性,能使已有的类扩充成关系更复杂、功能更强大的程序,并为面向对象思想的其他特性提供前提条件。在已有类的基础上定义新类,子类与父类建立继承关系后,子类拥有了父类的非私有成员属性和成员方法,同时还可以拥有自己的属性和方法。
本项目中公司中有两类员工,分别是正式员工与兼职员工,需要分别使用类表示两类员工,要求正式员工类属性包括员工编号、员工姓名、员工性别、员工所在部门、员工职称、员工工龄(其中员工工龄必须通过员工入职时间与系统当前时间的年份的差值来进行计算);兼职员工类属性包括员工编号、员工姓名、员工性别、员工所在部门、员工职称、员工工作时间。要求使用类的继承实现员工的信息管理,并能输出不同类员工的所有属性。
如图7-1所示,输入正式员工的基本信息及入职时间,能够如图7-2所示,输出正式员工的基本信息及员工工龄。
图7-1 A类员工信息添加
图7-2 A类员工信息查询
2.this关键字
this代表它所在函数所属对象的引用。我们通过以下几个例子来了解this关键字的用法。
(1)没有使用this的情况
运行结果:
姓名:null,员工号:0;
可以看出,这段程序中并没有将内容正确赋值给属性,在构造方法中,此时操作的empName、empNo都是构造方法中定义的empName、empNo。与类中属性完全不沾边。此时,为了明确哪个是类中的属性,需要加上this.类中属性。将构造方法进行修改如下:
(2)this调用构造方法(www.xing528.com)
this只能用于实例有关的代码块中,如实例方法、构造方法、实例初始化代码块或实例变量的初始化代码块等,this就代表对当前或者正在创建的实例对象的引用,通常可以利用这一关键字实现与局部变量同名的实例变量的调用。在构造方法中还可以用this来代表要显式调用的其他构造方法。除此之外,使用this关键字都将引发编译时错误。如果在类中有多个构造方法,也可以利用this关键字互相调用。假设一个类中存在多个构造方法,但无论多少构造方法,都要输出一个“新对象实例化”,此时就有两种做法。第一,直接写入代码中。
这个例子中可以看出,每个构造方法中均包括了需要的输出语句,若有多个构造方法则会出现程序冗余,为了避免这类情况,需要将构造方法之间进行互相调用,此时可以使用this(若干参数)的形式完成。将构造方法修改如下:
在使用this关键字调用其他关键字的时候,要注意this()调用其他构造方法的语句只能放在构造方法的首行;在使用this调用其他构造方法的时候,至少有一个构造方法是不用this调用的。
3.super关键字
super只能用于与实例有关的代码块中,如实例方法,构造方法,实例初始化代码块或实例变量的初始化代码块等,super代表当前或者正在创建的实例对象的父类,通常可以利用这一关键字实现对父类同名属性或者方法的调用。在构造方法中还可以用super代表要调用的父类构造方法,以实现构造方法链的初始化,由于object类为Java语言的根类,已经没有父类,因此,如果在object类中使用了关键字super,将引发编译错误。
(1)使用super调用父类的构造方法
子类不继承父类构造方法,因此,子类如果想使用父类的构造方法,必须在子类的构造方法中使用并且必须使用关键字super来表示,而且super必须是子类构造方法中的第一条语句。
(2)使用super操作被隐藏的成员变量和方法
如果在子类中想使用被子类隐藏的成员变量或方法就可以使用关键字super。
在本例中,子类EmployeeA使用super.empName和super.empNo来调用父类Employee被隐藏的成员变量empName和empNo,使用super.print调用父类Employee被隐藏的方法print,其结果如图7-3所示。
图7-3 super关键字
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。