zoukankan      html  css  js  c++  java
  • 动手动脑6

    1ExplorationJDKSource.java示例

    此示例中定义了一个类A,它没有任何成员:

    class A { }

    示例直接输出这个类所创建的对象

    public static void main(String[] args)    {

    System.out.println(new 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 inthashCode();

    所以最后输出的是类名A@,后边的输出属于随机的。

    2、Fruit.java 

    代码:

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

    }

    }

    运行结果分析:

      main方法实际调用的是public void println(Object x),在内部调用String类的vulueOf方法;

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

    Public String toString(){

         Return getClass()getName()+”@”+Integer.toHexString(hashCode());

    }

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

             Public native inthashCode();

    所以最后输出的是类名A@,后边的输出属于随机的。

    2、Fruit.java 

    代码:

    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()方法。

    2、“方法覆盖(override)”的要点

      (1)方法覆盖要求子类与父类的方法一模一样,否则就是方法重载(overload);

      (2)静态方法和最终方法(带关键字final的方法)不能被覆盖;

      (3)抽象方法必须在具体类中被覆盖(参见abstract修饰一章)。

      在子类中,若要调用父类中被覆盖的方法,可以使用super关键字(最后发现不会用)

    源代码:

    class A

    {

    int i=1,j=2;

    int plus()

    {

    return i +j;

    }

    }

    class B extends A

    {

    int i=10,k=20;//覆盖父类的i

    int plus()

    {

    return i+j+k;//覆盖父类的同名方法

    }

    }

    public class Father {

    public void main(String[] args)

    {

    A a=new A();//定义父类的对象

    B b=new B();

    System.out.println("a.i="+a.i+","+"a.j="+a.j+","+"a.plus()="+a.plus()); System.out.println("b.i="+b.i+","+"b.j="+b.j+","+"b.plus()="+b.plus());

    }

    }

  • 相关阅读:
    Oracle中创建视图
    SQL Server 2012 Express安装图解
    oracle学习笔记
    Oracle中视图的创建和处理方法
    DDL、DML和DCL的理解
    ROS学习--如何结合launch文件使用参数服务器
    stm32多块开发板can总线互联卡死问题
    ROS CAN总线设备接入(二)can总线数据提取和以ros topic形式发布
    ROS CAN总线设备接入(一)Linux动态库的显式调用
    ROS .so载入undefined reference to `dlopen'问题
  • 原文地址:https://www.cnblogs.com/1995-qxl/p/4940910.html
Copyright © 2011-2022 走看看