零基础Java第十七期:内部类

目录

一、Object类

1.1. 获取对象信息 

1.2. 对象比较equals方法

1.3. hashCode方法

​编辑 

二、内部类


一、Object类

1.1. 获取对象信息 

       Object是Java默认提供的一个类。Java里面除了Object类,所有的类都是存在继承关系的。默认会继承Object父 类。即所有类的对象都可以使用Object的引用进行接收。 

class Student{}
class Person{}
public class Main {
    public static void Func(Object obj){
        System.out.println(obj);
    }
    public static void main(String[] args) {
        Func(new Student());
        Func(new Person());
    }
}

     Object既然可以接收任何变量,那如果我们把Object设置成参数类型。 看下面的代码,如果我们的Object实现了子类的方法,就去执行自己的方法,没有就去执行父类的。

public class Person {
    public String name;

    public Person(String name) {
        this.name = name;
    }
}

public class Main {
    public static String Func(Object obj){
        return obj.toString();
    }

    public static void main(String[] args) {
        Object one = new String("Batman");
        Object two = new Person("Bruce");
        Func(two);
    }
}

以下是Object类里面的方法: 下面我们将重点说一下equals和hashCode方法。

 

1.2. 对象比较equals方法

       equals进行比较引用类型变量,比较的是成员地址,返回值是布尔类型;等同于“==”比较。

public class Animal {
    public String type;

    public Animal(String type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "Animal{" +
                "type='" + type + '\'' +
                '}';
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Animal("cat");
        Animal animal2 = new Animal("dog");

        boolean flag = animal1.equals(animal2);
        System.out.println(flag);
        System.out.println(animal1 == animal2);
    }
}

       我们也可以对重写equals方法里面的代码返回值进行修改,来让代码达到我们想要的结果。比如说我们想要对两个对象的值进行比较。我们把Main类里面的Object里的源码复制粘贴到Animal类里面,对返回值进行修改。我们点开String的源码里面,可以看到也使用了equals方法。

//Object类里的源码

    public boolean equals(Object obj) {
        return (this == obj);
    }
    public boolean equals(Object obj) {
        Animal temp = (Animal) obj;
        return temp.type.equals(this.type);
    }
//String当中也使用了equals方法
    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        return (anObject instanceof String aString)
                && (!COMPACT_STRINGS || this.coder == aString.coder)
                && StringLatin1.equals(value, aString.value);
    }

1.3. hashCode方法

public class Dog {
    public String color;

    public Dog(String color) {
        this.color = color;
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog1 = new Dog("brown");
        Dog dog2 = new Dog("brown");
        System.out.println(dog1.hashCode());
        System.out.println(dog2.hashCode());
    }
}

 

      上面两个dog对象的哈希值不一样。我们也可以像修改equals方法一样来修改hashcode()方法,此时我们再来看看。所以说,hashcode方法用来确定对象在内存中存储的位置是否相同。

 

二、内部类

public class OuterClass {
    public int data1 = 1;
    private int data2 = 2;
    public static int data3 = 3;

    public void test() {
        System.out.println("out::test方法");
    }

    //静态内部类
    static class InnerClass {
        public int data4 = 4;
        public static int data5 = 5;

        public void func() {
            System.out.println("InnerClass::func()");
        }
    }
}

       我们可以通过上述代码来实现一个静态内部类,那我们如何通过静态内部类来对成员变量进行实例化?

OuterClass.InnerClass inn = new OuterClass.InnerClass();

    (1)我们知道每一个类都会生成一个字节码文件,而静态内部类的字节码文件名形式“外部类$外部类”。

   (2)我们可以看到,在内部类里面。我们无法访问外部类的成员变量。那我们如何通过一些手段进行访问呢?

OuterClass outerClass = new OuterClass();
System.out.println(outerClass.data1);
System.out.println(outerClass.data2);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/915746.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Docker 概述 1.1 Docker 主要组成部分 1.2 Docker 安装 2.0 Docker 常见命令 2.1 常见的命令介绍 2.2 常见的命令演示 3.0 数据卷 3.1 数据卷常见的命令 3.2 常见…

GitCode光引计划有奖征文大赛

一、活动介绍 GitCode平台汇聚了众多杰出的G-Star项目,它们犹如璀璨星辰,用各自的故事和成就,为后来者照亮前行的道路。我们诚邀广大开发者、项目维护者及爱好者,共同撰写并分享项目在GitCode平台上托管的体验,挖掘平…

什么是CRM系统?

越来越多的企业意识到:如何有效管理与客户的关系、提升客户满意度,并通过这些提升推动销售增长,已经成为许多公司亟待解决的问题。为此,客户关系管理(Customer Relationship Management,简称CRM&#xff09…

ctfshow DSBCTF web部分wp

ctfshow 单身杯 web部分wp web 签到好玩的PHP 源码&#xff1a; <?php error_reporting(0); highlight_file(__FILE__);class ctfshow {private $d ;private $s ;private $b ;private $ctf ;public function __destruct() {$this->d (string)$this->d;$this…

不一样的CSS(一)

目录 前言&#xff1a; 一、规则图形 1.介绍&#xff1a; 2.正方形与长方形&#xff08;实心与空心&#xff09; 2.1正方形&#xff1a; 2.2长方形 3.圆形与椭圆形&#xff08;空心与实心&#xff09; 3.1圆形与椭圆形 4.不同方向的三角形 4.1原理 4.2边框属性 5.四…

VUE实现点击导航栏进行切换右边内容

首先看看效果&#xff0c;左边导航栏进行切换&#xff0c;右边内容进行切换 代码如下 <div><el-tabs :tab-position"tabPosition" style"height: 800px;"><el-tab-pane label"通知通告">通知通告</el-tab-pane><el-t…

微信小程序——实现二维码扫描功能(含代码)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

OpenGL ES 文字渲染进阶--渲染中文字体

旧文 OpenGL ES 文字渲染方式有几种? 一文中分别介绍了 OpenGL 利用 Canvas 和 FreeType 绘制文字的方法。 无论采用哪种方式进行渲染,本质上原理都是纹理贴图:将带有文字的图像上传到纹理,然后进行贴图。 渲染中文字体 利用 Canvas 绘制中文字体和绘制其他字体在操作方式上…

redis实现消息队列的几种方式

一、了解 众所周知&#xff0c;redis是我们日常开发过程中使用最多的非关系型数据库&#xff0c;也是消息中间件。实际上除了常用的rabbitmq、rocketmq、kafka消息队列&#xff08;大家自己下去研究吧~模式都是通用的&#xff09;&#xff0c;我们也能使用redis实现消息队列。…

WLAN消失或者已连接但是访问不了互联网

目录 1、WLAN已连接但是访问不了互联网 2、WLAN图标消失 今晚电脑突然连不上网了&#xff0c;重启试了好多种办法都没有用。 1、WLAN已连接但是访问不了互联网 这个的问题很多&#xff0c;建议直接网络重置&#xff0c;即将网络驱动全部删除&#xff0c;然后重新安装。 首先…

Hadoop生态圈框架部署(六)- HBase完全分布式部署

文章目录 前言一、Hbase完全分布式部署&#xff08;手动部署&#xff09;1. 下载Hbase2. 上传安装包3. 解压HBase安装包4. 配置HBase配置文件4.1 修改hbase-env.sh配置文件4.2 修改hbase-site.xml配置文件4.3 修改regionservers配置文件4.4 删除hbase中slf4j-reload4j-1.7.33.j…

【微服务】Docker 容器化

一、初识Docker 1. 为什么需要 Docker 大型项目组件较多&#xff0c;运行环境也较为复杂&#xff0c;部署时会遇到一些问题&#xff1a; 依赖关系复杂&#xff0c;容易出现兼容性的问题开发、测试、生产环境有差异 Docker 如何解决依赖的兼容问题 将应用的Libs&#xff08;…

「Py」Python基础篇 之 Python都可以做哪些自动化?

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「Py」Python程序设计&#x1f4da;全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定…

无插件H5播放器EasyPlayer.js网页web无插件播放器vue和react详细介绍

EasyPlayer.js H5播放器&#xff0c;是一款能够同时支持HTTP、HTTP-FLV、HLS&#xff08;m3u8&#xff09;、WS、WEBRTC、FMP4视频直播与视频点播等多种协议&#xff0c;支持H.264、H.265、AAC、G711A、Mp3等多种音视频编码格式&#xff0c;支持MSE、WASM、WebCodec等多种解码方…

什么是量化交易

课程大纲 内容初级初识量化&#xff0c;理解量化 初识量化 传统量化和AI量化的区别 量化思想挖掘 量化思想的挖掘及积累技巧 量化代码基础&#xff1a; python、pandas、SQL基础语法 金融数据分析 常用金融分析方式 常用因子分析方式 数据分析实战练习 回测及交易引擎 交易引擎…

Ajax 获取进度和中断请求

HTML加入一些内容方便看效果和做交互&#xff1a; <div><p>当前传输进度&#xff1a;<span id"progress">0%</span></p><button id"send">发送</button><button id"btn">中断</button> …

MCU移植LVGL

一.准备 1.1. 任意一个屏幕可以正常显示的GD32工程,stm32等其它mcu都一样&#xff1a; 1.2. LVGL源码 下载最新版源文件:https://github.com/lvgl/lvgl/tree/release/v8.3 我们会得到一个压缩文件&#xff0c;然后解压出来备用&#xff0c;现在准备好了一个GD32 Keil工程和一…

❤React-JSX语法认识和使用

1、JSX基本使用​ JSX是React的核心 JSX是ES的扩展 jsx语法 -> 普通的JavaScript代码 -> babel React可以使用JSX的前提和原因&#xff1a; React生态系统支持&#xff1a; 脚手架通常用于构建React应用程序&#xff0c;而JSX是React框架的核心语法之一。因此&#xf…

业务、技术、管理,谁才是指标平台的用户?

指标平台究竟应该给谁用&#xff1f;这个问题的答案涉及业务侧、技术侧和管理侧三个关键维度&#xff0c;每个维度都有不同的角色和需求。 业务侧&#xff1a;赋能一线&#xff0c;驱动增长 在业务侧&#xff0c;指标平台是前线员工的“作战地图”和“导航仪”。业务人员&…

向日葵软件Windows系统连接苹果系统(MacOS)的无反应问题解决办法

前言 向日葵软件最近开始收费了的&#xff0c;打算收割我们。这也是没有办法的事情&#xff0c;毕竟他们的程序员也是需要吃饭的&#xff0c;我也表示理解。 所以&#xff0c;我在连接了几次发现反应很迟钝后&#xff0c;果断的买了158元的包年会员。 但是&#xff0c;在买了会…