1类的继承----待编辑

##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()方法,以保证当垃圾回收对象占用内存时,对象的所有部分都能被正常终止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值