内部类和Object类

内部类

内部类的分类:实例内部类、静态内部类局部内部类匿名内部类

1.1实例内部类

java 复制代码
//外部类
public class OutClass1 {
    public int date;
    //实例内部类
    class Innerclass{
        public int ger;
        public void test(){
            System.out.println("test方法被执行了");
        }
    }
    public void func(){
        System.out.println("func方法被执行了");
    }
}

问:(1)如何实例化实例内部类对象

java 复制代码
 OutClass1 outClass1=new OutClass1();
    OutClass1.Innerclass innerclass=outClass1.new Innerclass();

需要外部类对象的引用

(2)实例内部类是可以访问外部类的成员属性的,但当实例内部类和外部类的成员属性同名时,实例内部类会优先访问自己的。那么,如何访问外部类的成员属性呢

通过外部类名称.this.同名成员在实例内部类方法里访问外部类的成员属性

注:

1.外部类中的任何成员都可以在实例内部类方法中直接访问

2.实例内部类所处的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束

3.实例内部类对象必须在先有外部类对象的前提下才能创建

4.实例内部类的非静态方法中包含了一个指向外部类对象的引用

5.外部类中,不能直接访问实例内部类中的成员,如果要访问必须要先创建内部类的对象

1.2静态内部类

实例化静态内部类

java 复制代码
 OutClass1.Innerclass innerclass=new OutClass1.Innerclass();

**注:**1.静态内部类只能访问外部类当中的静态成员

1.3局部内部类

局部内部类一般在方法中,只能在方法当中使用,并且不能被public等修饰

java 复制代码
public class OuterClass2 {
    public int a;
    public void method(){
        class InnerClass{
            public int b=200;
            public void innerclassMethod(){
                System.out.println("内部类方法");
            }
        }
        InnerClass innerClass =new InnerClass();
        innerClass.innerclassMethod();
    }
}

1.4匿名内部类

匿名内部类通常用于创建只需要使用一次的类

java 复制代码
public class Test1 {
    public void test(){
        System.out.println("test方法执行了");
    }

    public static void main(String[] args) {
        //相当于继承了Test1类
        new Test1(){
            @Override
            public void test() {
                System.out.println("重写的test方法执行了");
            }
        }.test();
    }
}
java 复制代码
interface HA{
    void test();
}
public class Test2 {
    public static void main(String[] args) {
        //相当于有一个类实现了HA接口
        new HA(){
            public int a;

            @Override
            public void test() {
                System.out.println("重写了接口方法");
            }
        }.test();
    }
}

匿名内部类可以定义和正常类一样的变量但是和正常类一样不能直接包含执行语句

Object类

概述:Object类是Java默认提供的一个类,除了Object类之外其他所有的类都有继承关系

Object的方法:

1)toString方法

如果使用object提供的方法打印引用类型的就是"地址",重写Object提供的方法的话,就可以打印引用类型当中的内容,数据类型打印出来的都是它本身的值.

2)equals方法

在Java当中,如果基本数据类型变量,使用"=="比较变量的值是否相同.

如果引用类型变量,使用"=="比较就是他们的地址是否相同

那么,如果你想要比较对象当中的内容的值是否相同,就需要重写Object类当中的equals()方法.

问题来了,为什么要重写Object当中的这个方法呢?

da:因为Object类当中的equal方法就是比较的他们的地址所以要重写地址

java 复制代码
public boolean equals(Object obj) {
        return (this == obj);
    }

3)hasCode方法

说白了就是确定两个对象的属性在内存当中的存储位置是否在同一个位置当中

java 复制代码
package demo5;
import java.util.Objects;
class Student{
    public String name;
    public int a ;
    public Student(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", a=" + a +
                '}';
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return a == student.a && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, a);
    }
}
class Person{}
public class ObjectClass {
}
java 复制代码
package demo5;

public class Test6 {
    public static void main(String[] args) {
        Student student =new Student("张三");
        Student student2 =new Student("张三");
        Student student3 =new Student("张三");
        System.out.println(student.a);
        System.out.println(student);
        System.out.println(student2.equals(student3));
        System.out.println(student2.hashCode());
        System.out.println(student3.hashCode());
        System.out.println(student.hashCode());
    }
}
相关推荐
q***09808 小时前
Spring Boot 2.7.x 至 2.7.18 及更旧的版本,漏洞说明
java·spring boot·后端
q***14649 小时前
oracle 12c查看执行过的sql及当前正在执行的sql
java·sql·oracle
好好研究9 小时前
SpringMVC框架 - 获取请求参数常用的注解
java·spring·mvc
c***93779 小时前
springboot使用logback自定义日志
java·spring boot·logback
七夜zippoe10 小时前
JVM调优实战:从GC日志分析到参数配置(Xmx, Xms, XX:+)
java·jvm·gc·jit·垃圾回收器
这不小天嘛10 小时前
多模态智能对话系统-后端开发
java
2509_9408802210 小时前
springboot集成onlyoffice(部署+开发)
java·spring boot·后端
切糕师学AI10 小时前
Spring 中的 @Service 注解
java·spring
10km10 小时前
java:Apache Commons Configuration2 占位符使用详解
java·apache·占位符·configuration2·commons·interpolator
qq_4798754310 小时前
X-Macros(3)
java·开发语言