zoukankan      html  css  js  c++  java
  • Java之Object类与instanceof关键字

    Object类是所有类的父类:

    我们上下代码:

     1 package com.learn.chap03.sec14;
     2 
     3 public class A { // 上面类A继承了Object类,因此又可这样定义: public class A extends Object{
     4     /**
     5      * object类是所有类的父类
     6      */
     7     public A(){
     8         super();
     9     }
    10 }

    我们可以通过多态,利用重写Object类常用的toString()和equals(Object obj)方法,来完成我们自己的逻辑。

     1 package com.learn.chap03.sec14;
     2 
     3 public class People {
     4     private String name;
     5     
     6     /**
     7      * 构造方法
     8      * @param name
     9      */
    10     public People(String name) {
    11         this.name = name;
    12     }
    13     
    14     public String getName() {
    15         return name;
    16     }
    17     
    18     public void setName(String name) {
    19         this.name = name;
    20     }
    21     
    22     /**
    23      * 重写了Object类的toString()方法
    24      */
    25     @Override
    26     public String toString() {
    27         return this.getName();
    28     }
    29     
    30     /**
    31      * 重写了Object类的equals(Object obj)方法
    32      */
    33     @Override
    34     public boolean equals(Object obj) {
    35         String name = ((People)obj).getName();
    36         return this.name == name;
    37     }
    38 
    39     public static void main(String[] args) {
    40         People p1 = new People("zhangsan");
    41         People p2 = new People("zhangsan");
    42         People p3 = new People("lisi");
    43         //p1.equals(p2);
    44         System.out.println("p1.equals(p2):"+p1.equals(p2));
    45         System.out.println("p1.equals(p3):"+p1.equals(p3));
    46         System.out.println(p1);
    47         System.out.println(p1.toString());
    48         System.out.println(p2);
    49         System.out.println(p2.toString());
    50         System.out.println(p3);
    51         System.out.println(p3.toString());
    52         
    53     }
    54 }

    运行结果:

    p1.equals(p2):true
    p1.equals(p3):false
    zhangsan
    zhangsan
    zhangsan
    zhangsan
    lisi
    lisi

    instanceof关键字

    作用:判断一个对象是否属于一个类

    格式: 对象 instanceof 类      (返回布尔型)

    向下转型做判断

    我们上下代码:

    1 package com.learn.chap03.sec15;
    2 
    3 public class Animal {
    4     
    5     public void say(){
    6         System.out.println("我是一个动物!");
    7     }
    8 }
    package com.learn.chap03.sec15;
    
    public class Dog extends Animal{
        
        @Override
        public void say() {
            System.out.println("我是一只狗");
        }
    
        /**
         * 定义子类方法
         */
        public void f1(){
            System.out.println("狗喜欢啃骨头");
        }
    }
    package com.learn.chap03.sec15;
    
    public class Cat extends Animal {
        
        @Override
        public void say(){
            System.out.println("我是一只猫");
        }
        
        /**
         * 定义子类方法
         */
        public void f2(){
            System.out.println("猫喜欢吃鱼");
        }
    }
    package com.learn.chap03.sec15;
    
    public class Test {
        
        /**
         * 静态方法里面 无法调用非静态方法 下面main方法是静态的,所以doSomeThing方法必须要为静态方法
         * @param animal
         */
        public static void doSomeThing(Animal animal){
            animal.say();
            if(animal instanceof Dog){ // 向下转型做判断,这样下面的代码就会是安全的
                ((Dog) animal).f1();
            }
            if(animal instanceof Cat){ // 向下转型做判断,这样下面的代码就会是安全的
                ((Cat) animal).f2();
            }
        }
        
        public static void main(String[] args) {
            Animal dog = new Dog();
            System.out.println("dog对象是否属于Animal类:"+(dog instanceof Animal));
            System.out.println("dog对象是否属于Dog类:"+(dog instanceof Dog));
            System.out.println("dog对象是否属于Cat类:"+(dog instanceof Cat));
        
            doSomeThing(new Dog());
            doSomeThing(new Cat());
            
        }
    }

    运行结果:

    dog对象是否属于Animal类:true
    dog对象是否属于Dog类:true
    dog对象是否属于Cat类:false
    我是一只狗
    狗喜欢啃骨头
    我是一只猫
    猫喜欢吃鱼

  • 相关阅读:
    POJ 3253 Fence Repair
    POJ 2431 Expedition
    NYOJ 269 VF
    NYOJ 456 邮票分你一半
    划分数问题 DP
    HDU 1253 胜利大逃亡
    NYOJ 294 Bot Trust
    NYOJ 36 最长公共子序列
    HDU 1555 How many days?
    01背包 (大数据)
  • 原文地址:https://www.cnblogs.com/eaglezb/p/5964512.html
Copyright © 2011-2022 走看看