有继承时的构造方法(转)
2015-10-25 11:55
239 查看
1.子类的构造方法中必须调用其基类的构造方法。
2.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。
3.使用this(arguement_list)调用本类的其他构造方法。
4.如果使用super()调用基类的构造方法必须写在子类构造方法的第一行。
5.如果子类的构造方法中没有显示的调用基类的构造方法,那么系统自动调用基类中没有参数的构造方法。
6.如果子类的构造方法中既没有显示的调用基类的构造方法,而且基类中也没有无参数的构造方法,则编译出错。
class A {
protected void print (String s) {
System.out.println(s);
}
A () {
print ("A()");
}
public void f() {
print("A:f()");
}
}
public class B extends A{
B(){
print("B()");
}
public void f(){
print("B:f()");
}
public static void main(String[] args){
B b = new B();
b.f();
}
}
分析程序输出结果,首先new出一个新对象b,即调用B的构造方法。由于B 是继承A类的,所以B必须继承A的构造方法,在B的构造方法中没有使用super(argument_list)调用A的构造方法,所以系统默认B 调用A中没有参数的构造方法,随即输出A()。接下来顺序执行B的构造方法,输出B()。最后程序调用b.f(),在B中f()是重写A中的f(),即将A中的f()覆盖,所以输出B:f()。
综上,输出结果为:A()
B()
B:f()
2.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。
3.使用this(arguement_list)调用本类的其他构造方法。
4.如果使用super()调用基类的构造方法必须写在子类构造方法的第一行。
5.如果子类的构造方法中没有显示的调用基类的构造方法,那么系统自动调用基类中没有参数的构造方法。
6.如果子类的构造方法中既没有显示的调用基类的构造方法,而且基类中也没有无参数的构造方法,则编译出错。
class A {
protected void print (String s) {
System.out.println(s);
}
A () {
print ("A()");
}
public void f() {
print("A:f()");
}
}
public class B extends A{
B(){
print("B()");
}
public void f(){
print("B:f()");
}
public static void main(String[] args){
B b = new B();
b.f();
}
}
分析程序输出结果,首先new出一个新对象b,即调用B的构造方法。由于B 是继承A类的,所以B必须继承A的构造方法,在B的构造方法中没有使用super(argument_list)调用A的构造方法,所以系统默认B 调用A中没有参数的构造方法,随即输出A()。接下来顺序执行B的构造方法,输出B()。最后程序调用b.f(),在B中f()是重写A中的f(),即将A中的f()覆盖,所以输出B:f()。
综上,输出结果为:A()
B()
B:f()
相关文章推荐
- 学习ECMAScript5规范中Object新增的API
- ubuntu 安装maven
- JS 获取滚动条位置
- python爬虫-第一步,获取页面
- Android平台免Root无侵入AOP框架Dexposed使用详解
- 面试题-->写一个函数,返回一个数组中所有元素被第一个元素除的结果
- 软件工程之项目管理
- 字符输入和输出(代码片段)
- mysql sharding
- 字符串加密
- Go指南中的练习:map
- 张先生和王某夫妇的债务纠纷
- 最长上升连续子序列(LintCode)
- 多线程同步方法<一>数据库悲观锁(for update)
- 在网页中嵌入地图
- 汇编:从9个有符号数中找出最小数,并将最小数与负数的个数以十进制的形式显示到屏幕上
- 再聊语言,模式,OOD
- CSS3 transform-origin属性之初理解
- C# 常用接口学习 IEnumerable<T>
- 夺命雷公狗jquery---14位置操作