1类的继承

来源:互联网 发布:java一年经验工资 编辑:程序博客网 时间:2024/05/22 17:51

1、类的继承

1.1

继承的基本思想是基于某个父类的的扩展,制定出一个新的子类,子类可以继承父类的原有的属性和方法,也可以增加原来父类所不具备的属性和方法,或者直接重写父类中的某些方法。

例如:平行四边形是特殊的四边形,可以说平行四边形类继承了四边形类,这是平行四边形类将所有四边形具有的属性和方法都保留下来,并基于四边形类扩展了一些新的平行四边形类特有的属性和方法。

在Java中使用extends关键字来标识两个类的继承关系;

例1;在项目中分别创建Test类和Test2类,在Test2类中编写成员方法doSomething()和doIt(),使Test2类继承Test类,重写父类的两个方法和构造方法,并新增doSomethingnew()方法。其中Test2类的构造方法中使用super关键字调用父类的构造方法和成员方法等;

class Test {public Test() { // 构造方法// SomeSentence    }protected void doSomething() { // 成员方法    // SomeSentence}protected Test doIt() { // 方法返回值类型为Test类型    return new Test();}}class Test2 extends Test { // 继承父类public Test2() { // 构造方法    super(); // 调用父类构造方法    super.doSomething(); // 调用父类成员方法}public void doSomethingnew() { // 新增方法    // SomeSentence}public void doSomething() { // 重写父类方法    // SomeNewSentence}protected Test2 doIt() { // 重写父类方法,方法返回值类型为Test2类型    return new Test2();}}

1.2

在子类中可以连同初始化父类构造方法来完成子类的初始化操作,既可以在子类的构造的方法中使用super()语句中调用父类的构造的方法,也可以在子类的中使用super关键字调用父类的成员方法等,但是子类没有权限调用父类中被修饰为private的方法,只可以调用父类中修饰为public或protected的成员方法。

在继承中有一种特殊的重写方式,子类与父类的成员方法返回值、 方法名称、参数类型及个数完全相同,唯一不同的是方法实现内容,这种特殊的重写方式被称为重构;

1.3

当重写父类方法时,修改方法的修饰权限只能从小的范围到大的范围改变;例如,父类中的doSomething()方法的修饰权限为protected,继承后子类中的方法doSomething()的修饰权限只能修改为public,不能修改为private。

1.4

在实例化子类对象时,Java编译器会在子类的构造方法中自动调用父类的无参构造器,为了验证这个理论,来看下面的实例;

10.2;在项目中创建Subroutine(子程序)类和两个父类,分别为Parent和SubParent。这3个类的继承关系是Subroutine类继承SubParent类,而SubParent类继承Parent类,分别在这3个类的构造方法中输出构造方法名称,然后创建Subroutine类的实例对象,继承机制将使该类的父类对象自动初始化。

class Parent { // 父类Parent() {    System.out.println("调用父类的parent()构造方法");}}class SubParent extends Parent { // 继承Parent类SubParent() {    System.out.println("调用子类的SubParent()构造方法");}}public class Subroutine extends SubParent { // 继承SubParent类Subroutine() {    System.out.println("调用子类的Subroutine()构造方法");}public static void main(String[] args) {    Subroutine s = new Subroutine(); // 实例化子类对象}}

在Eclipse中运行本实例,运行结果
10.3运行效果示例图

从本实例的运行效果可以看出,在实例化子类对象时它相应调用了父类的构造方法。在结果中可以看到调用构造方法的顺序,首先是顶级父类,让后是上一级的父类,最后是子类,也就是说,实例化子类对象时首先要实例化父类对象,然后再实例化子类对象,所以在子类构造方法访问父类的构造的方法之前,父类已经完成实例化操作。

注意:

在实例化子类对象时,父类无参构造方法将被自动调用,但有参构造方法并不能被自动调用,只能依赖于super关键字显示地调用父类的构造方法。

技巧:

如果使用finalize()方法对对象进行清理,需要确保子类的finalize()方法的最后一个动作是调用父类的finalize()方法,以保证当垃圾回收对象占用内存时,对象的所有部分都能被正常终止。

原创粉丝点击