Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2579355
  • 博文数量: 320
  • 博客积分: 9650
  • 博客等级: 中将
  • 技术积分: 3886
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-27 21:05
文章分类

全部博文(320)

文章存档

2024年(1)

2017年(5)

2016年(10)

2015年(3)

2014年(3)

2013年(10)

2012年(26)

2011年(67)

2010年(186)

2009年(9)

分类: Java

2010-05-10 23:31:18

今天在TSS上又看到有人讨论java多继承的问题,是想起这个话题的原因。^_^


java中任何类都默认继承 Java.lang.Object,除非被另一个继承覆盖(override),hoho 俺一直这么称呼override的,感觉更加贴切一些。
请看以下代码:

package org.myth.test;

public class SuperSon{
    
    SuperSon(){
        System.out.println(
"this is super son");
    }

}

对于编译器来说,这段代码会被首先补全为:

package org.myth.test;

public class SuperSon extends Object{
    
    SuperSon(){
        System.out.println(
"this is super son");
    }

}

对待任何一个类,编译器会去检查extends关键字,如果没有,编译器会默认添加extens Object

extends Object就是一段默认隐藏的代码,同样在Constructor中,也有一段默认隐藏的代码。

package org.myth.test;

public class SuperSon extends Object{
    
    SuperSon(){
        
super();//这就是一段默认隐藏代码
        System.out.println("this is super son");
    }

    //
整个构造方法也是一段默认隐藏代码

}

如同编译类时编译器回去检查extends关键字一样,编译器会首先检查是否存在constructor,如果没有,默认增加ClassName()构造方法。
在构造方法内部,编译器会检查第一行代码是否为super构造方法,如果不是,默认添加super()

这个就是为什么 new一个对象的时候,首先调用的是父类的构造方法。

一个错误代码示例:
package org.myth.test;

public class SuperMan {
    
    SuperMan(String s){
        System.out.println(
"this is super man");
    }

}



package org.myth.test;

public class SuperSon extends SuperMan{
    
    SuperSon(){
        System.out.println(
"this is super son");
    }

}
阅读(2049) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~