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
我是一只狗
狗喜欢啃骨头
我是一只猫
猫喜欢吃鱼

时间: 2024-10-19 17:43:53

Java之Object类与instanceof关键字的相关文章

深入研究java.lang.Object类

一.概述:       Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法.在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类.      可以使用类型为Object的变量指向任意类型的对象.      Object类有一个默认构造方法pubilc Object(),在构造子类实例时,都会先调用这个默认构造方法.      Object类的变量只能用作各种值的通用持有者.要对他们进行任何专门的操作,都需要知道它

Java之Object类详解

相等性的比较: 1.对于原生数据类型来说,比较的是左右两边的值是否相等 2.对于引用类型来说,比较左右两边的引用是否指向同一个对象,或者说左右两边的引用地址是否相同 java.lang.Object类.java.lang包在使用的时候无需显示导入,编译时由编译器自动帮助我们导入 API(application Programming interface),应用编程接口. package com.yuanzijian01; public class ObjectTest { public stat

研究java.lang.Object类

一.概述:        Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法. 在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类.       可以使用类型为Object的变量指向任意类型的对象.       Object类有一个默认构造方法pubilc Object(),在构造子类实例时,都会先调用这个默认构造方法.       Object类的变量只能用作各种值的通用持有者.要对他们进行任何专门的操作,都

Java中Object类中的方法

Java的Object类是所有类的顶级父类,方法如下: 1. hashCode(),返回一个hash值,两个对象的hash值不同,那么两个对象equals肯定为false.hash相同,equals不一定为true. 2. equals() 3. clone() 只有实现Cloneable接口的对象才可以调用这个方法.clone()是浅复制.如果对象里面又关联其他对象那么需要重写clone()方法才能深复制.深复制是针对引用类型而言的,基本数据类型不用考虑.序列化也可以实现深复制. 4. toS

java之Object类介绍

1.Object类是所有java类的基类 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类,ex: public class Person{ ~~~~~ } 等价于 public class Person extends Object{ ~~~~~ } 2.Object类之equals方法 ①.Object类中定义有: public boolean equals(Object obj)方法. 提供定义对象是否相等的逻辑. ②.Objec的equals方法  定义为

java.long.object类中的重要方法

一:概念 java.long.object Object类是所有Java类的祖先.每个类都使用 Object 作为超类. 二:方法概览 clone() 创建并返回此对象的一个副本. equals(Object obj) 指示某个其他对象是否与此对象“相等”. finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法.(JVM中自带的垃圾回收机制只能回收new出的对象) getClass() 返回一个对象的运行时类. hashCode() 返回该对象的哈希码值

Java:Object类详解

Java的一些特性会让初学者感到困惑,但在有经验的开发者眼中,却是合情合理的.例如,新手可能不会理解Object类.这篇文章分成三个部分讲跟Object类及其方法有关的问题. 上帝类 问:什么是Object类? 答:Object类存储在java.lang包中,是所有java类(Object类除外)的终极父类.当然,数组也继承了Object类.然而,接口是不继承Object类的,原因在这里指出:Section 9.6.3.4 of the Java Language Specification:"

java中Object类是怎么回事,干嘛使的?举例说明!

1.Object Class Object类的作用:m a r k - t o-        w i n:(视频下载) (全部书籍) 在java中,因为所有的类都有共性,所以java的缔造者们把java设计成这样:所有的类都是Object类的直接或间接子类,而且把上述所有类的共性都放在Object类中.这样就可以达到代码重用.All classes in java are subclasses of Object class. Object类的equals和toString的用法: 下面一组两

java中Object类 源代码详解

http://www.cnblogs.com/langtianya/archive/2013/01/31/2886572.html, 作者:浪天涯 package java.lang; public class Object { /* 一个本地方法,具体是用C(C++)在DLL中实现的,然后通过JNI调用.*/ private static native void registerNatives(); /* 对象初始化时自动调用此方法*/ static { registerNatives();