zoukankan      html  css  js  c++  java
  • 继承的应用

    注意:

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

    反编译结果:

     

  • 相关阅读:
    链接
    Java垃圾收集算法1
    Java基础知识常见面试题汇总第一篇
    Java基础知识
    线程间通信
    System.Span, System.Memory,还有System.IO.Pipelines
    微服务构件
    定位恶意软件
    Spring MVC-处理程序映射(Handler Mapping)-简单的Url处理程序映射(Simple Url Handler Mapping)示例(转载实践)
    Spring MVC-处理程序映射(Handler Mapping)-控制器类名称处理程序映射(Controller Class Name Handler Mapping)示例(转载实践)
  • 原文地址:https://www.cnblogs.com/amiee/p/4942080.html
Copyright © 2011-2022 走看看