继承和接口

动手动脑【继承条件下的构造方法使用】

源程序代码:package com;

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 KaoShi{

public static void main(String args[]) {

        Child c = new Child();

此代码的运行结果为:GrandParent Created.

Parent Created

Child Created

若将public parent类中的代码改为:public Parent() {

        super("Hello.Grandparent.");

        System.out.println("Parent Created");

    则运行的结果如下:GrandParent Created.String:Hello.Grandparent.

Parent Created

Child Created

若将public parent类中的代码改为:public Parent() {

       System.out.println("Parent Created");

       super("Hello.Grandparent.");

程序将会报错:说明通过super调用基类构造方法,必须是子类构造方法中的第一个语句。

动手动脑【finally 类是不可以被继承的,其中的属性也不能被修改】

程序代码:public final class Address

{

private final String detail;

      private final String postCode;//在构造方法里初始化两个实例属性

      public Address()

      {this.detail = "";

           this.postCode = ""}

public Address(String detail , String postCode)

      {this.detail = detail;

           this.postCode = postCode;

      }

      //仅为两个实例属性提供getter方法

      public String getDetail()

      {return this.detail;

      }

public String getPostCode()

      {

            return this.postCode;

      }

      //重写equals方法,判断两个对象是否相等。

      public boolean equals(Object obj)

      {

           if (obj instanceof Address)

           {

                 Address ad = (Address)obj;

                 if (this.getDetail().equals(ad.getDetail()) && this.getPostCode().equals(ad.getPostCode()))

                 {

                      return true}return false

public int hashCode()

      {

           return detail.hashCode() + postCode.hashCode();

      }

 

  public static void main(String args[])

  {

        Address ad=new Address("abc","efg");

        String a=new String();

       System.out.println( ad.getDetail());

        System.out.println(ad.getPostCode());

}

  }

动手动脑【探索jdk的奥秘】

源程序代码:package com;

public  class KaoShi {

public static void main(String[] args) {

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

}   

}

class A{}

运行结果为:com.A@2a139a55

动手动脑【神奇的+号】

程序代码:

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

    }

}

运行结果:f=Fruit toString.

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

原文地址:https://www.cnblogs.com/19950216z/p/4946928.html