• 11-5动手动脑


    testInherits.java

    Address.java

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

    ExplorationJDKSource.java

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

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

    TestInstanceof.java。

    TestInstanceof.java
    public class TestInstanceof
    {
        public static void main(String[] args) 
        {
            //声明hello时使用Object类,则hello的编译类型是Object,Object是所有类的父类
            //但hello变量的实际类型是String
            Object hello = "Hello";
            //String是Object类的子类,所以返回true。
            System.out.println("字符串是否是Object类的实例:" + (hello instanceof Object));
            //返回true。
            System.out.println("字符串是否是String类的实例:" + (hello instanceof String));
            //返回false。
            System.out.println("字符串是否是Math类的实例:" + (hello instanceof Math));
            //String实现了Comparable接口,所以返回true。
            System.out.println("字符串是否是Comparable接口的实例:" + (hello instanceof Comparable));
            String a = "Hello";
            //String类既不是Math类,也不是Math类的父类,所以下面代码编译无法通过
            //System.out.println("字符串是否是Math类的实例:" + (a instanceof Math));
        }
    }

    TestCast.java

    class Mammal{}
    class Dog extends Mammal {}
    class Cat extends Mammal{}
    
    public class TestCast
    {
        public static void main(String args[])
        {
            Mammal m;
            Dog d=new Dog();
            Cat c=new Cat();
            m=d;
            //d=m;
            d=(Dog)m;
            //d=c;
            //c=(Cat)m;
    
        }
    }

    第二个和第四个会引起编译出错

    ParentChildTest.java

    public class ParentChildTest {
        public static void main(String[] args) {
            Parent parent=new Parent();
            parent.printValue();
            Child child=new Child();
            child.printValue();
            
            parent=child;
            parent.printValue();
            
            parent.myValue++;
            parent.printValue();
            
            ((Child)parent).myValue++;
            parent.printValue();
            
        }
    }
    
    class Parent{
        public int myValue=100;
        public void printValue() {
            System.out.println("Parent.printValue(),myValue="+myValue);
        }
    }
    class Child extends Parent{
        public int myValue=200;
        public void printValue() {
            System.out.println("Child.printValue(),myValue="+myValue);
        }
    }

    TestPolymorphism.java

    class Parent
            
    {
    
        public int value=100;
        
    public void Introduce()
        {
    
                System.out.println("I'm father");
    
            }
    
    
    }
    
    class Son extends Parent
    {
    
        public int value=101;
    
             public void Introduce()
        {
    
                System.out.println("I'm son");
        
    }
    
    }
    
    
    class Daughter extends Parent
    {
    
        public int value=102;
        public void Introduce()
        {
    
                System.out.println("I'm daughter");
        
    }
    
    }
    
    public class TestPolymorphism
    {
    
    
        public static void main(String args[])
        {
    
            Parent p=new Parent();
    
            p.Introduce();
    
            System.out.println(p.value);
    
            p=new Son();
    
            p.Introduce();
    
            System.out.println(p.value);
    
            p=new Daughter();    
    
            p.Introduce();
    
            System.out.println(p.value);
    
    
        }
    
    
    }

  • 相关阅读:
    rsyslog imfile 模块说明
    正确的健身是啥意思——北漂18年(79)
    CC++ 内存对齐
    异步请求和超时控制
    dubbo入门(1)
    Query Cache Configuration
    perl 批量生成分区表
    perl 通过生成mysql 批量sql
    next 跳过当前循环
    last 退出当前循环
  • 原文地址:https://www.cnblogs.com/1983185414xpl/p/9907132.html
Copyright © 2020-2023  润新知