子父类中的变量,函数,构造函数的特点以及子类的实例化过程

来源:互联网 发布:mastercam线割编程 编辑:程序博客网 时间:2024/05/17 23:32


现在来说一下子父类中的变量,函数,构造函数的特点。

子父类中变量的特点:


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 stubZi 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 stubZi z = new Zi();//创建子类对象}}


在对子类对象进行初始化时,父类的构造函数也会运行。那是因为子类的构造函数默认第一行有一条隐式的语

super(); super()会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super()



为什么子类一定要访问父类中的构造函数。

因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始

的。所以子类在对象初始化时,要先访问一下父类中的构造函数。如果要访问父类中指定的构造函数,可以通过手

定义super语句的方式来指定。

需要注意一点,super语句一定要定义在子类构造函数的第一行。

子类的实例化过程:

子类的所有的构造函数,默认都会访问父类中空参数的构造函数。因为子类每一个构造函数内的第一行都有一句

隐式的super();当父类中没有空参数的构造函数时,子类必须手动通过super语句的形式来指定要访问父类中的构造

数。

当然,子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。子类中至少会有一个构造函数

访问父类中的构造函数。



补充一个问题:

为什么this和super不能在同一行?

因为他们都要写在第一行。

为什么要写在第一行?

因为初始化动作要在最开始完成。


通过对子父类中的变量,函数以及构造函数的特点的一些阐述,加深了对子父类的继承之间的理解。这个问题拓

展的方面比较广,以后学的深入了,会继续拓展。 努力,加油~







0 0
原创粉丝点击