博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
继承与接口
阅读量:4550 次
发布时间:2019-06-08

本文共 1359 字,大约阅读时间需要 4 分钟。

(一)super的使用方法

super关键字主要有以下两种用途。

1.调用父类的构造方法 子类可以调用由父类声明的构造方法。但是必须在子类的构造方法中使用super关键字来调用。其具体的语法格式如下: super([]); 如果父类的构造方法中包括参数,则参数列表为必选项,用于指定父类构造方法的入口参数。 

2.操作被隐藏的和被覆盖的成员方法 如果想在子类中操作父类中被隐藏的成员变量和被覆盖的成员方法,也可以使用super关键字,具体格式如下: super.成员变量名 super.成员方法名([参数列表])

(二)动手实验:继承条件下的构造方法调用

运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大!

 

class Grandparent

 {

    public Grandparent()

 {

        System.out.println("GrandParent Created.");

    }

    public Grandparent(String string)

 {

        System.out.println("GrandParent Created.String:" + string);

}

}

class Parent extends Grandparent

 {

   public Parent()

 {

        //super("Hello.Grandparent.");

        System.out.println("Parent Created");

       // super("Hello.Grandparent.");

 

}

}

class Child extends Parent

 {

   public Child()

 {

        System.out.println("Child Created");

    }

}

public class TestInherits

 {

   public static void main(String args[])

 {

        Child c = new Child();

    }

}

结论:

通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。

(三)为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?

构造函数(constructor)是一种特殊的方法 。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new一起使用在创建对象的语句中 。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的。构造函数的功能主要用于在类的对象创建时定义初始化的状态。

构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量。
子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化。
不能反过来调用也是这个原因,因为父类根本不知道子类有神魔变量而且这样一来子类也得不到初始化的父类变量,导致程序运行出错!

转载于:https://www.cnblogs.com/1443188449qq/p/4947704.html

你可能感兴趣的文章
CSS五類常用選擇器(收藏)
查看>>
have a thing用法
查看>>
为什么 远程钩子 必须使用动态链接库dll(而且是.data? 段共享的动态链接库)...
查看>>
redis 从0到1 linux下的安装使用 数据类型 以及操作指令 一
查看>>
MongoDB-启动的时候出现了问题
查看>>
解决nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed错误
查看>>
第三次作
查看>>
模板 - ST表
查看>>
ZMQ示例:使用 curve 进行加密通信
查看>>
【网络流】 SGU 194 Reactor Cooling 无源无汇上下界可行流(裸题)
查看>>
cmd命令大全
查看>>
SSM框架---详细整合教程
查看>>
hdu 1907 尼姆博弈
查看>>
hdu 2177 威佐夫博弈变形
查看>>
面试问题联想
查看>>
IOS数据持久化之归档NSKeyedArchiver
查看>>
你应该首先保护哪些应用程序?这个问题本身问错了!
查看>>
C++之检测文件结尾
查看>>
【Delphi】注册快捷键
查看>>
字符串、文件操作,英文词频统计预处理
查看>>