java继承2-构造函数详细
2015-10-27 17:12
441 查看
1. 继承中构造函数的调用顺序
先调用父类构造,再调用子类构造
原因: 必须要先给父类分配空间,这样子类才可以继承
注意事项:
a.对于父类的变量,子类继承,但是是有自己的空间
b.静态变量不继承,是存在于Java虚拟机分配的数据空间里
c.构造函数也不继承
2.关于super关键字
当父类拥有无参构造时,子类的构造函数可以不写什么,默认调用;
当然也可以通过super()调用。
e.g:
如果父类只有有参构造函数,子类必须显性super(实参表)写构造函数
e.g:
3.super关键字其他使用
a.调用父类同名被隐藏的成员变量
方式: super.变量名
b.调用父类同名被覆盖的成员方法
方式:super.方法名()
e.g:
先调用父类构造,再调用子类构造
原因: 必须要先给父类分配空间,这样子类才可以继承
注意事项:
a.对于父类的变量,子类继承,但是是有自己的空间
b.静态变量不继承,是存在于Java虚拟机分配的数据空间里
c.构造函数也不继承
2.关于super关键字
当父类拥有无参构造时,子类的构造函数可以不写什么,默认调用;
当然也可以通过super()调用。
e.g:
package com.xiyou.weijie.chap5; public class Base { protected int a; public Base() { System.out.println("Base无参构造"); } <span style="font-size:18px;"></span><pre name="code" class="java"> public Base(int a) { this.a = a; System.out.println("Base有参构造"); }}
package com.xiyou.weijie.chap5; public class Child extends Base{ private int b; public Child() { /* * 这里不写任何语句,但是会隐形的调用父类的无参构造 * super();这样是显性调用 */ System.out.println("Child无参构造"); } public static void main(String[] args) { // TODO 自动生成的方法存根 Child c=new Child(); } }
如果父类只有有参构造函数,子类必须显性super(实参表)写构造函数
e.g:
package com.xiyou.weijie.chap5; public class Base { protected int a; public Base(int a) { this.a = a; System.out.println("Base有参构造"); } }
package com.xiyou.weijie.chap5; public class Child extends Base{ private int b; public Child() { super(14);//如果这里不写,报错 System.out.println("Child无参构造"); } public static void main(String[] args) { // TODO 自动生成的方法存根 Child c=new Child(); } }
3.super关键字其他使用
a.调用父类同名被隐藏的成员变量
方式: super.变量名
b.调用父类同名被覆盖的成员方法
方式:super.方法名()
e.g:
package com.xiyou.weijie.chap5; public class Base { protected int a; public Base(int a) { this.a = a; System.out.println("Base有参构造"); } public void showBase() { System.out.println("Base.showBase()"); } }
package com.xiyou.weijie.chap5; public class Child extends Base{ private int a; public Child(int a) { super(14);//如果这里不写,报错 this.a=a; System.out.println("Child无参构造"); } public void showBase() { System.out.println("super.a:"+super.a); } public void showChild() { System.out.println("a:"+a); } public void show() { super.showBase(); } public static void main(String[] args) { // TODO 自动生成的方法存根 Child c=new Child(10); c.showBase(); c.showChild(); c.show(); } }
相关文章推荐
- Java的反射reflect使用
- 用POI导出数据到excel文件
- Json字符串和Java对象转换利器——Jackson
- Java点滴-List<Integer> list; 中尖括号的意思
- Java设计模式1——策略模式(Strategy Pattern)
- SpringMVC与LogBack集成
- Java:进制转换
- Spring MVC 乱码问题
- HashMap实现原理
- 运用java在数组键盘输入的位置加入元素
- Ubuntu 12.04下配置JDK7
- java关键字this使用
- Quartz与Spring的整合-Quartz中的job如何自动注入spring容器托管的对象
- java 线程中unchecked exception处理
- eclipse设置和优化
- Java集合框架总结
- eclipse下使用MultiDex解决65536限制
- 简要总结破解myeclipse10的方法
- eclipse 中git解决冲突
- Java并发编程:Thread类的使用