zoukankan      html  css  js  c++  java
  • 接口与继承 动手动脑

    一、运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大!

    源代码:

    package demo;
    
    class Grandparent 
    {
        public Grandparent() {
    
            System.out.println("GrandParent Created.");
            
    
    }
          public Grandparent(String string) {
    
                System.out.println("GrandParent Created.String:" + string);
    
            }
    }
    package demo;
    
    class Parent extends Grandparent
    {
        public Parent() {
    
            //super("Hello.Grandparent.");
    
            System.out.println("Parent Created");
    
           // super("Hello.Grandparent.");
    
        }
    }
    package demo;
    
    class Child extends Parent 
    {
        public Child() {
    
            System.out.println("Child Created");
    
        }
    }
    package demo;
    
    public class Class {
    
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
            Child c = new Child();
    
        }
    
    }

    程序运行结果截图:

    结论: 通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量。子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化。子类自动拥有父类声明为public和protected的成员。通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。子类的构造方法在运行之前,必须调用父类的构造方法.以final声明的方法不允许覆盖,以final声明的变量不允许更改,利用final,我们可以设计出一种特殊的“只读” 的“不可变类”。

    二、参看ExplorationJDKSource.java示例 此示例中定义了一个类A,它没有任何成员: class A { } 示例直接输出这个类所创建的对象

    程序源代码:

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

  • 相关阅读:
    4KB对齐
    小甲鱼PE详解之区块表(节表)和区块(节)(PE详解04)
    策略设计模式与c语言中的函数指针
    包装类类值传第
    java的 clone方法
    ubuntu中maven建的web项目不能将project facet设置为 dynamic web module 3.0
    maven 笔记
    eclipse中xml文件不能自动提示的解决办法
    oracle merge into 的例子
    oracle 常用sql
  • 原文地址:https://www.cnblogs.com/sist1437493141/p/4949668.html
Copyright © 2011-2022 走看看