zoukankan      html  css  js  c++  java
  • Java接口与继承部分的小程序

    1.总结父类与子类之间构造方法的调用关系(通过super调用基类构造方法,必须是子类构造方法的第一个语句)

    代码示例:

     

    运行结果截图:

    修改代码,使调用另一个构造方法

     代码为:

     运行结果为:

    所以,可以通过sperm调用基类构造方法,但super语句必须在第一句。

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

    构造方法用于对基类的初始化。构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量。子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化。
    3.一个没有任何成员的类A直接输出会得到A@1c5f743,为什么?真正被执行的代码是什么?

    请按照以下步骤进行技术探险:(1)使用javap –c命令反汇编ExplorationJDKSource.class; (2)阅读字节码指令,弄明白println()那条语句到底调用了什么? (3)依据第(2)得到的结论,使用Eclipse打开JDK源码,查看真正被执行的代码是什么

    在编译源代码时,当遇到没有父类的类时,编译器会将其指定一个默认的父类(一般为Object),而虚拟机在处理到这个类时,由于这个类已经有一个默认的父类了,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();所以出现上述结果。
    4.验证:
    public class Fruit
    
        { 
                public String toString()
                 {
                   return "Fruit toString.";
                 }
                public static void main(String args[])
                {
                   Fruit f=new Fruit();
                   System.out.println("f="+f);
                  //System.out.println("f="+f.toString());
                 }
    }

    输出结果:


    其中Fruit类覆盖了Object类中的toString方法

    在“+”运算中,当任何一个对象与一个String对象连接时,会隐式地调用其toString()方法,默认情况下,此方法返回“类名 @ + hashCode”。为了返回有意义的信息,子类可以重写toString()方法。

     5.编写代码测试方法覆盖的以下特性:

    在子类中,若要调用父类中北覆盖的方法,可以使用super关键字;

    覆盖方法的允许访问范围不能小于原方法。

    覆盖方法所抛出的异常不能比原方法更多。

    声明为final方法不允许覆盖。 例如,Object的getClass()方法不能覆盖。

    不能覆盖静态方法

    代码示例:

     1 public class Test extends Parent {
     2      public static void main(String[] args) {
     3          Test t=new Test();
     4          t.Parent();
     5          t.Parent1();
     6          t.Child();
     7      }
     8      public void Parent(){        //parent方法的重载                             
     9             System.out.println("Child");
    10         }
    11     public void Child(){       
    12         super.Parent();    //调用父类方法parent         
    13         
    14     }
    15 }
    16 class Parent{                             
    17     public void Parent(){                                     
    18         System.out.println("Parent ");
    19     }
    20     public void Parent1(){
    21         System.out.println("Parent1");
    22         }
    23     
    24 }

    运行结果:

  • 相关阅读:
    Appium——api常用函数
    Appium——元素定位
    Appium——adb 启动问题Invalid argument: cannot open transport registration socketpair could not read ok from ADB Server failed to start daemon * error: cannot connect to daemon
    Appium——Error while obtaining UI hierarchy XML file:com.android.ddmlib.SyncException:
    Appium——解决每次启动时都安装setting和unlock app方法
    Appium——连接真机,adb devices获取不到设备号
    Appium——详解Appium server capabilities
    Appium——WebDriverException: Message: A new session could not be created.
    Appium基础——one demo
    vscode 踩坑汇总
  • 原文地址:https://www.cnblogs.com/chen160340/p/6052213.html
Copyright © 2011-2022 走看看