一个月学会Java 第10天 详讲static和面向对象——继承与Java世上最厉害的IDE——IDEA

news2024/10/10 14:53:27

Day10 详讲static和面向对象——继承与Java世上最厉害的IDE——IDEA

今天的篇幅会比较长,因为牵扯到不少的内容还有面向对象的内容

第一章 static

首先我们先来填一下坑,之前挖的,说后面要详细讲解static这个关键字的作用,那在这之前我们先来复习一下static

  1. 首先 static 这个关键字可以描述的方法,可以直接用main方法直接调用到
  2. 其次 static 描述的不能直接调用 非static 的方法,只能直接调用 static 方法
  3. 然后 非static 方法 可以调用所有

接着我再来讲一个小知识点,那就是我们调用static方法的时候其实很简单。我们可以直接通过 类名.方法()
的方式进行调用,因为静态方法还叫做类方法,他是一个类的所有对象公用的,就是说你一个类的多个对象,对类方法或者类属性进行更改都会影响到其他对象的调用

//我们先来测试静态方法的调用
public class Hello {
    public static void main(String[] args) {
        Hello2.p();
        System.out.println(Hello2.i);
    }
}

class Hello2 {
    public static int i = 50;

    public static void p() {
        System.out.println("打印一点小东西,我是静态方法");
    }
}

注意在开发过程中不能这么写。
在这里插入图片描述

我们可以看到,我压根就没有创建对象是吧,就是用了我说的 类名.静态方法()
就实施了调用,接下来就演示演示,刚刚说的,如果我单个对象更改了静态属性,那我另外一个对象访问同个静态属性是不是也被更改了

public class Hello {
    public static void main(String[] args) {
        Hello2 hello1 = new Hello2();
        Hello2 hello2 = new Hello2();
        System.out.println("hello1.i: " + hello1.i);
        //通过hello1这个对象对i进行更改
        hello1.i = 100;
        System.out.println("hello2.i: " + hello2.i);
    }
}

class Hello2 {
    public static int i = 50;

    public static void p() {
        System.out.println("打印一点小东西,我是静态方法");
    }
}

在这里插入图片描述

是不是发现被更改了,因为就和我说的一样,他们共享的一个属性。这里我要再提一嘴,因为静态变量属于类变量,其实只能有类再调是比较合理,但是不够人性,所以java是这样的。

但是这里要说到另外一个语言了,那就是C#,在C#里面如果你使用对去调用静态方法是会报错的,是合理,但是不够人性化了,只能说各有长短吧

第二章 面向对象之继承

这里可是一个比较多知识量的第一个部分了,如果有点不太清醒了,我建议你先去休息一下然后再来看

我们现在开始讲他的概念,我们先来看他这个知识点叫什么名字,是不是叫做继承,我们来回想一下现实生活中的继承是什么,是不是有继承权的意思,还有比如你继承了你父亲的什么什么特征,继承了你母亲什么什么特征。

所以,我们可以理解为,继承就是 留给 的,所以我们分别把被继承的基本的叫做 基类父类超类
继承的叫做 子类派生类,我们一般都叫做父与子。

现在我们说完了他们的名称,我现在来说说他们的基本概念,首先是子类会继承父类的所有方法和属性(非私有的属性)
,然后继承的这个关键字叫做 extends 接下来我们进行一些案例来讲解

public class Hello extends Father {
    public static void main(String[] args) {
        Hello hello = new Hello();
        System.out.println(hello.i);
        hello.p();
    }
}

class Father {
    public int i = 100;

    public void p() {
        System.out.println("123");
    }
}

在这里插入图片描述

我是不是在我的Hello中没有写任何相关的i属性和p方法对吧,但是我都还是能调用到,是不是就是相当于我的Hello类从Father中继承了这么两个东西,一个i属性一个p方法。

那么还记得之前我们所说的访问修饰符吗,访问修饰符在哪里都是奏效的,得先符合访问修饰符才能进行其他的操作。

假如我将i这个属性的访问修饰符修改为private呢

public class Hello extends Father {
    public static void main(String[] args) {
        Hello hello = new Hello();
        System.out.println(hello.i);
        hello.p();
    }
}

class Father {
    private int i = 100;

    public void p() {
        System.out.println("123");
    }
}

在这里插入图片描述

是不是就发生了报错,所以我们的一切行动都还是要基于我们的封装性,也就是访问修饰符的控制。还有一个坑需要填的,就是我们学习访问修饰符的时候,是不是有个东西没有学的足够透彻的,那就是protected,首先我们先准备两个类,两个在不同包的类,然后将他们继承在一起。

package Test;

//导入一下父类

import Test.Extends.Father;

public class Hello extends Father {
    public static void main(String[] args) {
        Hello hello = new Hello();
        System.out.println(hello.i);
    }
}
package Test.Extends;

public class Father {
    protected int i = 500;
}

在这里插入图片描述

是不是正常使用了,但是,还记得我们说protected的时候是怎么说的吗?
在这里插入图片描述

是不是和子类,那如果我用其他类调用这个继承了父类的子类呢,那还能行吗?我也这么想过,但是事实是不行的,看代码

package Test;

import Test.Extends.Father;

public class Hello extends Father {
}

class T {
    public static void main(String[] args) {
        Hello hello = new Hello();
        System.out.println(hello.i);
    }
}
package Test.Extends;

public class Father {
    protected int i = 500;
}

在这里插入图片描述

是不是报错了,说明什么,只能自己使用,及时自己继承的父类之后,也不能被其他类使用自己去调用父类的属性和方法。

欧克,咱们进入继承的下一个内容,那就是 super 你们先别懵,还记得我之前说过的, 父类 还叫做什么?是不是 基类超类
,super是不是超的意思,其实这个意思就是调用父类构造器,自然也是和方法的重载是一样的,通过你的填的参数默认选择

但是如果你不写,然后你又使用了extends关键字去继承了,那他会默认放在你的无参构造器里面,就和this()
一样,而且记住,如果使用父类super()的话那就需要放在第一行,不然会报和this()一样的错,然后他的用法其实也和this是一样的,代表父类对象

public class Hello extends Father {
    public int a = 0;

    public static void main(String[] args) {
        System.out.println(new Hello().a);
    }

    public Hello() {
        a = super.i;
    }
}

class Father {
    public int i = 50;
}

在这里插入图片描述

是不是和this的用法非常的类似,那我们在使用super()去调用父类的构造器来试试

public class Hello extends Father {
    public int a = 0;

    public static void main(String[] args) {
        System.out.println(new Hello().a);
    }

    public Hello() {
        super();
        a = super.i;
    }
}

class Father {
    public int i = 50;

    public Father() {
        System.out.println("哈哈嗨,这里是爹地");
    }
}

在这里插入图片描述

是不是去调用了父类的构造器了,自然也是只能写在第一行的,这里我就不给代码了,我自己替换了

在这里插入图片描述

接下来要讲的一个东西可是非常重要的,用来判断是不是他的实例的,比如说我的类是Hello是吧,那我的hello就是他的实例,也就是对象的意思接下来的这个关键字可是至关重要的,
instanceof 在这个关键字的左边是你要判断的比如hello,右边是被判断的,比如说Hello

public class Hello {
    public static void main(String[] args) {
        Hello hello = new Hello();
        if (hello instanceof Hello) {
            System.out.println("确定是亲生的实例");
        }
    }
}

在这里插入图片描述

这里就是判断是否为实例,但是不止如此,如果我的Hello继承于Father的话,那我的Father也可以拿来判断

public class Hello extends Father {
    public int a = 0;

    public static void main(String[] args) {
        Hello hello = new Hello();
        if (hello instanceof Father) {
            System.out.println("是Father的实例");
        }
    }

    public Hello() {
        super();
        a = super.i;
    }
}

class Father {
    public int i = 50;

    public Father() {
        System.out.println("哈哈嗨,这里是爹地");
    }
}

在这里插入图片描述

结果很明显,Father也是可以拿来判断的是吧,但是如果我不继承的话,自然就不会打印了

接下来还是由继承带来的一个特性,名为重写,全名是方法的重写,听名字是不是还是有点懵的,实际上其实就是顾名思义,就是重写的意思,重写从父类继承过来的方法

public class Hello extends Father {
    public static void main(String[] args) {
        Hello hello = new Hello();
        hello.p();
    }

    //实际上可以理解为覆盖,但是不一样,后面有他的用途的
    //还有一个注解是可以加的叫做@Override,加上会直接去检测你父类里面有没有这个方法
    //如果没有直接编译报错,如果有,那就进行重写
    public void p() {
        System.out.println("进行了重写");
    }
}

class Father {
    //父类方法
    public void p() {
        System.out.println("父类方法p()");
    }
}

在这里插入图片描述

那我们再来验证一下Override的注解

public class Hello extends Father {
    public static void main(String[] args) {
        Hello hello = new Hello();
        hello.p();
    }

    @Override
    public void p() {
        System.out.println("重写");
    }
}

class Father {

}

在这里插入图片描述

这就是面向对象的继承的内容

第三章 下载IDEA

这里有部分需要使用科技,也就是破解,自然你如果只是学习,可以下载社区版。
当然如果你想用全功能的idea要么就是花钱要么就是使用科技
浅提一嘴,如果你要花钱还是有两种渠道的,一种是去tb上面买IDEA的账号,另外一种就是去正常购买IDEA

首先我们先讲一下IDEA的来历和java的ide们,一般用的只有两个,要么是eclipse要么就是Intellij IDEA,我们一般称之为IDEA。

我们下载idea是通过jetbrains的官网去下载,点我去jetbrains官网

我这里也直接给一个IDEA链接

在这里插入图片描述

然后下载过来之后进行安装即可使用。

当你下载完了开启了和破解了之后,你就可以创建项目了

在这里插入图片描述

你大概可以看到这么一个界面,点击new Project就可以创建了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这样就创建完了

在这里插入图片描述

我们还可以使用包.类的方式直接创建带package的类

在这里插入图片描述

在这里插入图片描述

点向绿色三角形就能看到
在这里插入图片描述

或者是对有main方法的类里面按右键也会有运行

在这里插入图片描述

在这里插入图片描述

现在已经有了这么强大的工具了,那我们来说说面向对象的继承这块的祖先

首先我们来看看,我们要正常的继承是不是需要先创建一个子类比如说 Hello
然后再创建一个父类 Father 然后让Hello类去继承Father类,最后可以让Hello使用Father中的非私有属性或者方法,
那么有没有这么一种可能,其实我们所有的类都有一个父类。

这个意思就是说假如我的Hello没有继承Father的话,那他有没有父类呢?其实是有的,就是Object类,他是所有类的基类,也就是所有类的父类,不是直接父类也是间接父类,举例说明就是
“爷爷” 类

假如我的Hello他继承Father,然后Father并没有明写的继承,但其实是有继承关系的,他继承了Object类,咱们使用IDEA这个宇宙无敌最强JavaIDE来查看一下Object类里面都有什么吧,首先我们使用双击shift唤出搜索栏然后搜索就行,选中使用双击或者敲击回车都是可以的

在这里插入图片描述

我们可以看到里面还是有些方法我们是比较眼熟的,比如之前使用的hashCode看地址可的这个方法

还有教package关键字时的getClass查看当前类

还有打印对象直接就是调用toString方法,配合继承的重写其实就可以达成自己想打印什么就打印什么

还有比较使用的equals,我们在教字符串常用的方法中里面使用到过,因为使用 ==
比较我们之前也讲过了是比较地址的,但是使用equals的话就是使用这个方法里面写的东西了,在Object类里面有,所以我们所有的类都会有,因为所有的类都继承Object类,不是父类就是
爷爷类,都是会有Object类里面所有的非私有方法的,所以比如说字符串的equals就是String这个类重写的Object类里的equals方法

在这里插入图片描述
这就是这一天的全部内容了,还是需要一点时间消化的,我们今天就到这里了。

喜欢的话不要忘记点个赞点个收藏。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树的构建与遍历

在介绍二叉树的篇章中,我们用方法简单创建了一个二叉树,如下代码: public treeNode creattree(){treeNode Anew treeNode(A);treeNode Bnew treeNode(B);treeNode Cnew treeNode(C);treeNode Dnew treeNode(D);treeNode Enew treeNode(E);tr…

新大话西游图文架设教程

开始架设 1. 架设条件 新大话西游架设需要准备: linux 系统服务器,建议 CentOs 7.6或以上版本游戏源码,。 2. 安装宝塔面板 宝塔是一个服务器运维管理软件,安装命令: yum install -y wget && wget -O in…

zabbix7.0配置中文界面

Zabbix 是一个广泛使用的开源监控解决方案,支持多种语言界面。本文将详细介绍如何配置 Zabbix 以使用中文界面,从而提高用户体验和可读性。 1. 环境准备 在开始配置之前,请确保你已经安装并运行了 Zabbix 服务器、前端和数据库。如果你还没有…

成品婚恋交友相亲源码打包APP小程序H5公众号可打包小程序APP公众号H5源码交付支持二开

聊天交友系统开发专业语聊交友app开发搭建同城交友源码开发婚恋交友系统相亲app小程序H5婚恋交友小程序的定制开发与行业新机遇婚恋交友app红娘连线系统app小程序开发一站式开发系统源码:婚恋交友H5与小程序开发详解 电商运营技术服务源码系统php相亲交友平台APP婚恋…

前端优化之路:git commit 校验拦截

但是想要做到高效落地执行,就需要做些别的功课,先展示下成果图 需要了解git hooks,它是git的钩子,就像vue拥有自己的钩子一样。 官方文档:https://git-scm.com/docs/githooks 项目安装 husky,建议稳定版本…

Linux进程间通信(个人笔记)

Linux进程通信 1.进程通信介绍1.1进程间通信目的1.2进程间通信发展1.3进程间通信的具体分类 2.管道2.1匿名管道2.1.1代码实例2.1.2 fork共享管道原理2.1.3 管道的读写规则与特点2.1.4 进程池 2.2 命名管道2.2.1 命名管道的创建2.2.2匿名管道与命名管道的区别2.2.3代码实例 3.Sy…

Spring Boot洗衣店订单系统:数据驱动的决策

3系统分析 3.1可行性分析 通过对本洗衣店订单管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本洗衣店订单管理系统采用JAVA作为开发语言,S…

如何安装Llama3.1 —— 附一键安装包!

一键安装包文末领取! 下载地址 软件:Llama版本:3.1语言:简体中文大小:645 MB安装环境:Win10及以上版本(64bit) 软件简介 ‌‌LLaMA模型是Meta研发的大语言模型‌,旨在帮助研究人员推进他们…

vue-jsonp的使用和腾讯地图当前经纬度和位置详情的获取

1.下载: npm install –save vue-jsonp2.main.js中引入: //腾讯逆地址解析会用到jsonp import {VueJsonp} from vue-jsonp; Vue.use(VueJsonp);3.腾讯地图中使用 uniapp中获取*经纬度*和通过经纬度获取当前**位置详情** //获取当前经纬度 getLocation…

【AI系统】AI在不同领域的应用与行业影响

本文将探讨AI在不同技术领域和行业中的广泛应用,以及这些应用如何影响和改变我们的世界。 I. 引言 AI技术正日益渗透到各个技术领域,从计算机视觉到自然语言处理,再到音频处理,AI的应用正变得越来越广泛。这些技术的发展不仅推动…

影刀RPA实战:制作Excel工资条

1.实战目标 使用Excel制作工资条是一种常见的做法,每个公司几乎都有这样的需求,我们先介绍下使用excel手动制作工资条的方法,看看不足之处,使用影刀RPA又会给我们带来怎样的便利,让我们更倾向于选择影刀来处理。 工资…

世昌股份与吉利亲密关系:资产负债率远高同行,应收账款周转率偏弱

《港湾商业观察》杨丹妮 9月23日,河北世昌汽车部件股份有限公司(以下简称“世昌股份”)回复了第一轮审核问询函,公司于今年六月递表北交所,保荐机构为东北证券。 近几年新能源汽车如日中天,世昌股份也因此…

系统端口号被占用问题处理(WindowsLinux系统)

Windows 直接kill占用端口的进程 WinR 输入cmd 打开命令行窗口 1.查询本地已被占用的端口号: 下面以8080端口为例: netstat -aon|findstr "8080" 查看本地8080端口进程的PID 2.杀死"xxxx"端口号的进程 (下面的22868是 你查到…

DAY5 数组

概念 数组是一个数据容器,可用来存储一批同类型的数据。 存储原理 int[] arr new int[]{12,24,36}; 理解为数组对象中存储的为地址信息 一维数组 静态数组 数据类型[] 数组名 new 数据类型[]{元素1,元素2,......}; 数据类型[] 数组名 {元素1,元…

惯导+卫导组合高精度模块UM981系列新品特点

近日,和芯星通发布了UM981系列全系统全频高精度RTK/INS组合定位模块,可同时跟踪 BDS B1I/B2I/B3I/B1C/B2a/B2b,GPS L1/L2/L5,GLONASS G1/G2/G3,Galileo E1/E5a/E5b/E6,QZSS L1/L2/L5,NavIC L5&a…

Extreme Compression of Large Language Models via Additive Quantization阅读

文章目录 Abstract1. Introduction2. Background & Related Work2.1. LLM量化2.2. 最近邻搜索的量化 3.AQLM:Additive Quantization for LLMs3.1. 概述3.1.0 补充**步骤说明****举例说明** 3.2. 阶段1:代码的波束搜索3.3. 阶段2:码本更新3.4. 阶段3&…

Java中对象的比较(equals、Comparable、Comparator)

文章目录 一、PriorityQueue中插入对象二、元素的比较 2.1、基本类型的比较2.2、对象比较的问题三、对象的比较 3.1、覆写基类的equals3.2、基于Comparable接口类的比较3.3、基于比较器比较3.4、三种方式对比 一、PriorityQueue中插入对象 前篇我们讲解了优先级队列&#xff0…

mpi 示例小程序集锦

1,小ring 程序 数据从rank 0开始向外传递,rank1收到后再传递给 rank2,以此类推 除了rank0,程序一开始时,每个rank先进入接收等待状态,像是多米诺骨牌,都立起来。 rank 0开始倒下,依…

设备管理系统:强化特种设备安全监管的智能引擎

设备管理系统在特种设备安全监管中发挥着至关重要的作用,主要体现在以下几个方面: 一、实时监控与预警 运行状态监控:设备管理系统能够实时监控特种设备的运行状态,包括开机时间、运行时间、停机时间等关键参数。这有助于及时发现…

初级网络工程师之从入门到入狱(六)

本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习。 网络工程师从入门到入狱 前言一、vlan与vlanif二、路由器之三层通信方式2.1、路由器物理接口2.2、子接口2.3、vlanif 三、数…