首页 > 其他 > 详细

继承的应用

时间:2015-11-06 12:58:48      阅读:243      评论:0      收藏:0      [点我收藏+]

 

注意:

1.子类自动拥有父类声明为publicprotected的成员。

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

3.子类的构造方法在运行之前,必须调用父类的构造方法

4.final声明的方法不允许覆盖,以final声明的变量不允许更改,利用final,我们可以设计出一种特殊的“只读” 的“不可变类”。

 

示例代码:

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();

   }

}

该代码运行的结果是:

 技术分享

附:

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

答:

构造函数是在创建给定类型的对象时执行的类方法。构造函数具有与类相同的名称,它通常初始化新对象的数据成员。构造函数用于创建类的实例,并对实例进行初始化操作,通过不同的参数传递,可进行不同的实例初始化操作。

子类可以理解为在父类下面的一个更细的划分,所以必须先调用父类的构造方法,如果要给一个对象分类,如果它的类型是子类的话,它一定也属于父类。

 

神奇代码:

public class ExplorationJDKSource {

 

/**

 * @param args

 */

public static void main(String[] args) {

System.out.println(new A());

}

 

}

 

class A{}

运行结果:

 技术分享

原因分析: 前面示例中,main方法实际上调用的是:

public void println(Object x),这一方法内部调用了String类的valueOf方法。

valueOf方法内部又调用Object.toString方法:

public String toString() {

return getClass().getName() +"@" + 

Integer.toHexString(hashCode());

}

hashCode方法是本地方法,由JVM设计者实现:

public  native int hashCode();

 

 

反编译结果:

 技术分享

 

继承的应用

原文:http://www.cnblogs.com/amiee/p/4942080.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!