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中运行本实例,运行结果
从本实例的运行效果可以看出,在实例化子类对象时它相应调用了父类的构造方法。在结果中可以看到调用构造方法的顺序,首先是顶级父类,让后是上一级的父类,最后是子类,也就是说,实例化子类对象时首先要实例化父类对象,然后再实例化子类对象,所以在子类构造方法访问父类的构造的方法之前,父类已经完成实例化操作。
注意:
在实例化子类对象时,父类无参构造方法将被自动调用,但有参构造方法并不能被自动调用,只能依赖于super关键字显示地调用父类的构造方法。
技巧:
如果使用finalize()方法对对象进行清理,需要确保子类的finalize()方法的最后一个动作是调用父类的finalize()方法,以保证当垃圾回收对象占用内存时,对象的所有部分都能被正常终止。
- 1类的继承
- c++类的继承:私有继承,公有继承,保护继承
- Java_类的继承1
- 4.1.1 类的继承
- 类的继承 保护继承和私有继承
- C#类的继承-什么是继承
- 继承QVector----模板类的继承
- 类的一般继承与虚继承
- js 类继承的说明例子1
- java中类的继承1
- python 类的继承,内置函数(1)
- C++类的继承练习(1)
- 继承:单继承、派生类成员的访问属性、多继承、菱形继承、虚继承,菱形虚拟继承
- java 类的继承
- 类的继承
- C#类的继承
- JavaScript类的继承
- C++ 类的继承
- oracle用户,权限,角色
- Intellij idea破解办法
- centos6.5上搭建maven私服
- Struts总结
- python数据结构(列表、元组、字典)
- 1类的继承
- 0.2 用代码画画——目标读者、教材特色、内容大纲
- mysql多实例安装
- 虚拟机迁移技术漫谈,第 1 部分(转) 出自IBM
- 9-9 (hash, pb_ds)
- EBS创建通用上传实现过程
- mvn update后java compiler中jdk版本变更
- Linux历史文化
- 2.57亿美元:纸币打破了ICO资金的全部记录