您的位置:首页 > 编程语言 > Java开发

Java学习记录(8)——继承

2016-10-31 11:15 183 查看
Java的继承具有单继承的特点,每个子类只有一个直接父类。

Java的继承通过extends关键字来实现。

语法格式如下:

修饰符 class SubClass extends SuperClass{

//类定义部分

}

子类是父类的扩展,子类是一种特殊的父类。

子类扩展了父类,将可以获得父类的全部成员变量和方法,但是,Java的子类不能获得父类的构造器。

如果定义一个Java类时并未显示指定这个类的直接父类,则这个类默认扩展java.lang.Object类,因此,java.lang .Object类是所有类的父类,要么是其直接父类,要么是其间接父类。因此所有的Java对象都可调用java.lang.Object类所定义的实例方法。

子类包含与父类同名方法的现象被称为方法重写(Override),也被称为方法覆盖。

方法的重写:方法名相同、形参列表相同;子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;子类方法的访问权限应比父类方法的访问权限更大或相等。

如果需要在子类方法中调用父类中被覆盖的方法,则可以使用super(被覆盖的是实例方法)或者父类类名(被覆盖的是类方法)作为调用者调用父类中被覆盖的方法。

如果父类方法具有private访问权限,则该方法对其子类是隐藏的,因此其子类无法访问该方法。

方法重载和方法重写在英语中分别是overload和override,重载主要发生在一个类的多个同名方法之间,而重写发生在子类和父类的同名方法之间。二者之间没有什么联系。父类方法和子类方法之间可能发生重载,因为子类会获得父类方法,如果子类定义了一个与父类方法相同的方法名,但参数列表不同的方法,就会形成父类方法和子类方法的重载。

如果需要在子类方法中调用父类被覆盖的实例方法,则可使用super限定来调用父类被覆盖的实例方法。

super是Java提供的一个关键字,super用于限定该对象调用它从父类继承得到的实例变量或方法,super不能出现在static修饰的方法中。在子类定义的实例方法中可以通过super来访问父类中被隐藏的实例变量。

如果被覆盖的是类变量,在子类的方法中则可以通过父类名作为调用者来访问被覆盖的类变量。

子类不会获得父类的构造器,但子类构造器里可以调用父类构造器的初始化代码,类似一个构造器调用另一个重载的构造器。

一个构造器中调用另一个重载的构造器使用this调用来完成,在子类构造器中调用父类构造器使用super调用来完成。

super调用的是其父类的构造器,而this调用的是同一个类中的重载的构造器。使用super调用父类构造器也必须出现在子类构造器执行体的第一行。

子类构造器调用父类构造器分为如下几种情况:

1、子类构造器执行体的第一行使用super显示调用父类构造器,系统将根据super调用里传入的实参列表调用父类对应的构造器。

2、子类构造器执行体的第一行代码使用this显示调用本类中重载的构造器,系统将根据this调用里传入的实参列表调用本类中的另一个构造器。执行本类中另一个构造器时即会调用父类构造器。

3、子类构造器执行体中既没有super调用,也没有this调用,系统将会在执行子类构造器之前隐式调用父类无参数的构造器。

当调用子类构造器来初始化子类对象时,父类构造器总会在子类构造器之前执行。

创建任何对象总是从该类所在继承树最顶层类的构造器开始执行,然后依次向下执行,最后才执行本类的构造器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: