继承中的构造方法
来源:互联网 发布:freeboard软件 编辑:程序博客网 时间:2024/06/06 21:02
一、Super关键字、this关键字
在Java类中使用this表示当前对象,使用Super来引用基类的成分。如果子类继承超类,当我们new这个子类对象时,子类对象里面会有一个父类对象,那么怎么引用里面的父类对象呢?
举个栗子:
在父类对象中,有一个成员变量value,初始值为0,在子类对象中又有自己的value,初始值也为0,
我们知道,当new一个对象出来时,会有一个this引用,指向自身。因为这个对象是子类对象,所以还有一个Super引用,指向父类。
至此,ChildClass cc = new ChildClass()执行完毕。
当执行到cc.f() 时,首先会调用Super.f,父类对象的value,变成100,打印“FatherClass.value=100” ,当执行到value=200,子类对象的value变成200。
最终的打印结果为:
FatherClass.value = 100
ChildClass.value = 200
200
100
二、继承中的构造方法规则:
1、子类的构造过程中必须调用其基类的构造方法。
2、子类可以在自己的构造方法中使用super(argument_list(参数列表))调用基类的构造方法。
1)使用this(argument_list)调用本类自身的构造方法。
2)如果调用super,必须写在子类构造方法的第一行。
3、如果子类的构造方法中没有显示地调用基类构造方法,则系统默认调用基类无参数的构造方法。
4、如果子类构造方法中没有显示调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。
举个例子:
class SuperClass{ private int n; //声明成员变量n SuperClass(){ //构造方法一 System.out.println("SuperClass()"); } SuperClass(int n){ //构造方法二 System.out.println("SuperClass(" + n + ")"); this.n =n; }}class SubClass extends SuperClass{ private int n; SubClass(int n){ //构造方法三 System.out.println("SubClass(" + n + ")"); this.n = n; } SubClass(){ //构造方法四 super(300); System.out.println("SubClass()"); } }public class TestSuperSub{ public static void main(String args[]){ SubClass sc1 = new SubClass(); SubClass sc2 = new SubClass(400); }}
客户端中, 先把构造方法一和super(300)和SubClass sc2 = new SubClass(400)注释掉,SubClass sc1 = new SubClass()调用了构造方法四,构造方法四需要在父类中找没有参数的构造方法,而此时父类中没有没有参数的构造方法。(与在子类的构造方法中必须调用父类的构造方法违背)所以编译出错。当没有显示调用时,调用父类中没有参数的构造方法。
- 继承中的构造方法
- 继承中的构造方法
- 继承中的构造方法
- 继承中的构造方法
- 继承中的构造方法
- 继承中的构造方法
- 继承中的构造方法
- 继承中的构造方法
- 继承中的构造方法
- 继承中的构造方法
- 继承中的构造方法
- 继承中的构造方法
- 继承中的构造方法
- 继承中的构造方法调用
- java 继承中的构造方法
- 关于继承中的构造方法
- java继承中的构造方法
- 继承关系中的构造方法
- 一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
- java解析JSON文件的方法
- jvm中堆栈、常量区
- IO流之规范写法
- Android Binder机制完全解析
- 继承中的构造方法
- java权限管理与用户角色权限设计
- 初识海明距离
- Map遍历效率比较
- 分布式事务的方法
- Headfirst-设计模式
- 应用程序正常初始化0xc0000142,请单击确定关闭程序
- 为树莓派(Raspberry pi 2)安装raspbian系统,并用windows自带的远程桌面连接登录
- 如何设置eclipse不同的workspace共享配置