Object类、抽象类及抽象方法、接口(多态)

本文介绍了Java中的Object类特性,如equals()、getClass()、hashCode()和toString(),以及抽象类和接口的概念、应用场景和面试题。重点讲解了类与接口的关系,包括单继承、多实现以及接口的多态性。
摘要由CSDN通过智能技术生成

一、Object 类

理解:

一个类没有明确继承的父类,都默认继承objiect类,objiect默认就是无参构造。所以object 就是所有类的祖先类(也叫基类)。

equals():

理解 :比较两个对象内存地址是否相同

//基本数据类型使用==,比较的是两个变量里的值是否相同
//      int a = 10;
//      int b = 20;
//      System.out.println(a == b);//false
//引用数据类型使用==,比较的是两个对象里的内存地址是否相同
        Object obj1 = new Object();//0x001
        Object obj2 = new Object();//0x002
        System.out.println(obj1 == obj2);//false
System.out.println(obj1.equals(obj2));//false
/**
         * public boolean equals(Object obj){
         *              obj1 == obj2
         *      return (this == obj);
         * }
         */

getClass() :

获取该类的class对象 ( 前言: 使用到一个类如果这个类没有记载到方法区时,就会加载,加载过程是jvm 会将该类())

       Object obj1 = new Object();
       Object obj2 = new Object();
        
        //获取Object类的class对象
Class<? extends Object> class1 = obj1.getClass();
Class<? extends Object> class2 = obj2.getClass();
        
        System.out.println(class1 == class2);//true
​
System.out.println("获取该类的全限定名:" + class1.getName());//java.lang.Object
        
        //获取该类所有的方法(思想:万物皆对象,一个属性是一个属性对象,一个方法是一个方法对象)
        Method[] methods = class1.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println(method);
        }

hashCode() :

获取该对象的哈希码,(注意:hash码+散列算法算出的int值它不等于内存地址);

toString(): 返回对象的字符串表现形式(对象转换成字符串)

底层:

 Object obj1 = new Object();
        Object obj2 = new Object();
        
        System.out.println(obj1.hashCode());
        System.out.println(obj2.hashCode());

to String():

理解:返回对象的字符串表现形式(将对象转换成字符串)

        Object obj1 = new Object();
        Object obj2 = new Object();
        
        
        //注意:打印对象,默认调用toString()
        System.out.println(obj1);//java.lang.Object@15db9742
        System.out.println(obj2.toString());//java.lang.Object@6d06d69c
/**
         * public String toString(){
         *      return getClass().getName() + "@" + Integer.toHexString(hashCode());
         * }
         * 
         *  getClass().getName() -> this.getClass().getName() -> obj2.getClass().getName()
         *  理解:获取class对象,再获取类的全限定名 -- java.lang.Object
         *  
         *  Integer.toHexString(hashCode()) -> Integer.toHexString(this.hashCode()); -> Integer.toHexString(obj2.hashCode());
         *  理解:获取对象的hash值,再将十进制的hash值转换为十六进制的hash值 -- 6d06d69c
         */

Object类的深入(应用):

子类重写equesl

扩展:Object 周边底层 ---toString() equals 内容

二、抽象类

理解:将方法交给非抽象的子类去实现

应用场景:该方法在该类中,但是给方法不好实现,是交给非抽象的子类去实现

注意:抽象方法必须在抽象类中

如果子类继承了抽象类,那就必须实现抽象方法,或者全国有子类的话可以有子类来实现父类的抽象方法

三、抽象类和抽像方法的深入

面试题:

关系:

类 - 类:单继承

类 - 接口:多实现

接口与接口:多继承

1.一个类可以实现多个接口? 可以 2.一个接口可以实现多个接口? 不可以

3.接口里面的方法不一定都是抽象的? 是的 JDK1.8开始接口中允许有:静态常量、抽象方法、默认方法、静态方法

4.接口解决了类的单继承问题? 是的

5.一个类是否可以继承一个类并同时实现多个接口? 可以

6.接口可以new对象? 不可以,创建的是匿名内部类的对象

四、接口:

理解;

1.接口是一个特殊的抽象类 2.在JDK1.8之前,接口中只能有静态常量和抽象方法 3.在JDK1.8开始,接口中允许使用静态方法和默认方法 4.接口是引用数据类型的一种

应用场景:

接口:制定规则,定义哪些方法为抽象的 实现类:实现接口中的抽象方法

关系:

类 - 类:单继承

类 - 接口:多实现

接口与接口:多继承

面试题:

1.一个类可以实现多个接口? 可以 2.一个接口可以实现多个接口? 不可以

3.接口里面的方法不一定都是抽象的? 是的 JDK1.8开始接口中允许有:静态常量、抽象方法、默认方法、静态方法

4.接口解决了类的单继承问题? 是的

5.一个类是否可以继承一个类并同时实现多个接口? 可以

6.接口可以new对象? 不可以,创建的是匿名内部类的对象

创建匿名内部类对象
步骤:
1.底层创建匿名实现类,实现I1接口中的i1Method方法
public class Test01$1 implements I1{
    @Override
    public void i1Method() {
        System.out.println("用良心做教育");
    }
}
2.创建匿名实现类对象 -- new Test01$1();
3.将实现类对象的内存地址赋值给接口的引用

六、接口的多态:

类的多态:子类对象指向父类的引用
接口的多态:实现类对象指向接口的引用
  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值