子父类中的变量,函数,构造函数的特点以及子类的实例化过程
2014-05-10 18:43
232 查看
现在来说一下子父类中的变量,函数,构造函数的特点。
子父类中变量的特点:
如果子父类中出现非私有的同名成员变量时,子类要访问本类中的变量,用this来访问,子类要访问父类中的同
名变量,用super来访问。
关于super和this的使用需要注意如下:
1.super的使用和this的使用几乎一致。
2.this代表的是本类对象的引用。
3.super代表的是父类对象的引用。
子父类中函数的特点:
子类出现和父类一模一样的函数时,当子类对象调用该函数,会运行子类函数的内容,如同父类的函数被覆盖
一样。这种情况就是是子父类中函数的另一个特性,叫做重写,也叫做覆盖。
当子类继承了父类,沿袭了父类的功能到子类中。子类虽然具备了该功能,但是功能的内容却和父类不一致。这
时,没有必要定义新功能,而是使用覆盖特性,保留父类的功能定义,并重写功能内容。
覆盖过程中要注意的问题
1.子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。(public > 默认权限 > private)
2.静态只能覆盖静态。
重载和重写的区别在于:
1.重载是只看同名函数的参数列表。
2.重写是子父类方法一模一样,包括返回值类型。
子父类中的构造函数:
在对子类对象进行初始化时,父类的构造函数也会运行。那是因为子类的构造函数默认第一行有一条隐式的语
句super(); super()会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super()
为什么子类一定要访问父类中的构造函数。
因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始
化的。所以子类在对象初始化时,要先访问一下父类中的构造函数。如果要访问父类中指定的构造函数,可以通过手
动定义super语句的方式来指定。
需要注意一点,super语句一定要定义在子类构造函数的第一行。
子类的实例化过程:
子类的所有的构造函数,默认都会访问父类中空参数的构造函数。因为子类每一个构造函数内的第一行都有一句
隐式的super();当父类中没有空参数的构造函数时,子类必须手动通过super语句的形式来指定要访问父类中的构造函
数。
当然,子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。子类中至少会有一个构造函数
会访问父类中的构造函数。
补充一个问题:
为什么this和super不能在同一行?
因为他们都要写在第一行。
为什么要写在第一行?
因为初始化动作要在最开始完成。
通过对子父类中的变量,函数以及构造函数的特点的一些阐述,加深了对子父类的继承之间的理解。这个问题拓
展的方面比较广,以后学的深入了,会继续拓展。 努力,加油~
子父类中变量的特点:
class Fu { int num=4; } class Zi extends Fu { int num=5; void show() { System.out.println(super.num); } } public class Test014 { public static void main(String[] args) { // TODO Auto-generated method stub Zi z = new Zi(); z.show(); } }
如果子父类中出现非私有的同名成员变量时,子类要访问本类中的变量,用this来访问,子类要访问父类中的同
名变量,用super来访问。
关于super和this的使用需要注意如下:
1.super的使用和this的使用几乎一致。
2.this代表的是本类对象的引用。
3.super代表的是父类对象的引用。
子父类中函数的特点:
子类出现和父类一模一样的函数时,当子类对象调用该函数,会运行子类函数的内容,如同父类的函数被覆盖
一样。这种情况就是是子父类中函数的另一个特性,叫做重写,也叫做覆盖。
当子类继承了父类,沿袭了父类的功能到子类中。子类虽然具备了该功能,但是功能的内容却和父类不一致。这
时,没有必要定义新功能,而是使用覆盖特性,保留父类的功能定义,并重写功能内容。
覆盖过程中要注意的问题
1.子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。(public > 默认权限 > private)
2.静态只能覆盖静态。
重载和重写的区别在于:
1.重载是只看同名函数的参数列表。
2.重写是子父类方法一模一样,包括返回值类型。
子父类中的构造函数:
class Fu { Fu()//父类构造函数 { System.out.println("Fu run"); } } class Zi extends Fu { Zi()//子类构造函数 { //super(); System.out.println("Zi run"); } } public class Test015 { public static void main(String[] args) { // TODO Auto-generated method stub Zi z = new Zi();//创建子类对象 } }
在对子类对象进行初始化时,父类的构造函数也会运行。那是因为子类的构造函数默认第一行有一条隐式的语
句super(); super()会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super()
为什么子类一定要访问父类中的构造函数。
因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始
化的。所以子类在对象初始化时,要先访问一下父类中的构造函数。如果要访问父类中指定的构造函数,可以通过手
动定义super语句的方式来指定。
需要注意一点,super语句一定要定义在子类构造函数的第一行。
子类的实例化过程:
子类的所有的构造函数,默认都会访问父类中空参数的构造函数。因为子类每一个构造函数内的第一行都有一句
隐式的super();当父类中没有空参数的构造函数时,子类必须手动通过super语句的形式来指定要访问父类中的构造函
数。
当然,子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。子类中至少会有一个构造函数
会访问父类中的构造函数。
补充一个问题:
为什么this和super不能在同一行?
因为他们都要写在第一行。
为什么要写在第一行?
因为初始化动作要在最开始完成。
通过对子父类中的变量,函数以及构造函数的特点的一些阐述,加深了对子父类的继承之间的理解。这个问题拓
展的方面比较广,以后学的深入了,会继续拓展。 努力,加油~
相关文章推荐
- Java重修之路(八)面向对象之继承,子父类中变量、函数、构造函数的特点,子类实例化过程。
- 黑马程序员_Java基础_面向对象(继承、子父类变量和函数以及构造函数特点、final关键字、抽象类、模版方法模式、接口)
- OO 中的继承分析:主要分析在编译和运行过程中 子类、父类 的字段和方法以及实例化时候在内存中分配 和 执行的先后,以及两个原则
- 学习笔记——继承中子父类变量,函数,构造函数的特点
- 继承之子父类中构造函数的特点之子类实例化过程
- 面向对象-子父类中构造函数的特点(子类实例化过程)
- JAVA子父类中构造函数的特点-子类实例化过程
- 面向对象(子父类中构造函数的特点-子类实例化过程)
- java面向对象-子父类中构造函数的特点-子类实例化过程super
- 面向对象(子父类中构造函数的特点-子类实例化过程)
- 面向对象-子父类中构造函数的特点(子类实例化过程)
- java 父类访问子类对象的实例变量 继承过程中的执行顺序
- 深入理解构造函数和析构函数以及父类和子类的部分关系
- 静态变量、实例变量初始化时机,以及子类隐藏父类成员时,创建子类对象的一些问题
- 多态中成员函数以及成员变量的特点总结:
- 继承—子父类中的构造函数-子类的实例化过程
- C++ 子类和父类同名成员变量或函数
- 子类父类中类成员(变量、函数、构造函数)的特点
- 关于PHP中构造函数以及子类继承父类构造函数的相关问题
- C++父类子类间函数重定义,虚函数重写(覆盖)以及重载