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调用,系统将会在执行子类构造器之前隐式调用父类无参数的构造器。
当调用子类构造器来初始化子类对象时,父类构造器总会在子类构造器之前执行。
创建任何对象总是从该类所在继承树最顶层类的构造器开始执行,然后依次向下执行,最后才执行本类的构造器。
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调用,系统将会在执行子类构造器之前隐式调用父类无参数的构造器。
当调用子类构造器来初始化子类对象时,父类构造器总会在子类构造器之前执行。
创建任何对象总是从该类所在继承树最顶层类的构造器开始执行,然后依次向下执行,最后才执行本类的构造器。
相关文章推荐
- java学习记录(四)继承与访问权限的学习与总结
- JAVA学习记录(三)面向对象编程三大特性之继承
- Java学习记录(一):Java中继承与静态static、非静态、构造方法等的初始化顺序
- java学习记录笔记--继承,super,Object类
- Java Media Framework 基础教程(学习JMF中,看到好的中文教程,在这里记录下来)
- Java Media Framework 基础教程(学习JMF中,看到好的中文教程,在这里记录下来)
- Apache、Tomcat、mysql与Java Web开发环境学习记录(20070410)
- JAVA学习心得--继承、接口与泛型
- 用java连接数据库的学习记录
- java学习记录
- java下使用TeeChart生成图表的学习记录
- java学习记录20061008
- 学习记录——【转】java中打开explorer
- 8月21号,决定入住CSDN,不定期的更新Blog,记录本人JAVA学习之路
- Java学习总结之第五章 继承
- JAVA学习【知】继承
- 学习JAVA继承关系很好的例子
- 终于在csdn上安家了!这个博客将作为我学习java历程,记录我心得的一个地方
- Java 学习笔记 (3) -抽象类 abstract 接口 interface 内部类 inner class 继承 extends 实现 implements 包 package
- Java基本数据类型的学习记录