从零开始学Java(超详细韩顺平老师笔记梳理)08——面向对象编程中级(上)IDEA常用快捷键、包、封装、继承

文章目录

  • 前言
  • 一、IDEA
    • 使用
    • 常用快捷键
    • 模板/自定义模板
  • 二、包package
    • 1. 基本介绍
    • 2. 包的命名规范
    • 3. 常用的包和如何引入
    • 4. 注意事项和细节
  • 三、访问修饰符(四类)
  • 四、封装Encapsulation(重点)
    • 1. 封装介绍
    • 2. 封装步骤
    • 3. 快速入门
    • 4. 封装与构造器
  • 五、继承(重点)
    • 1. 为什么需要继承
    • 2. 继承原理图
    • 3. 快速入门
    • 4. 继承的优点
    • 5. 使用细节
    • 6. 继承的本质(重要)
  • 总结


前言

前面我们用sublime Text记事本学习了面向对象初级的内容,从这一章节开始,我们正式使用idea集成开发工具,学习和锻炼更为复杂的编程能力,同时也是对面向对象内容的更深度学习,包括包、封装、继承、重写、多态、转型、断点调试等内容。

受篇幅限制,本篇文章是韩顺平老师课程P264-P296(第8章:面向对象编程中级)上半部分重点内容的详细总结。

  1. IDEA常用快捷键与模板
  2. 包的使用与规范
  3. 访问修饰符
  4. 封装(重点)
  5. 继承(重点)

一、IDEA

使用

  • out 文件夹 存放 编译后的 .class文件
  • src 文件夹 存放 源码文件 .java 文件

常用快捷键

  1. 删除当前行(默认是ctrl+y,可以自己配置)
    ctrl+d
  2. 复制当前行(自己配置)
    ctrl+alt+下光标
  3. 补全代码
    alt+/
  4. 添加注释和取消注释(第一次是添加注释,第二次是取消注释)
    ctrl+/
  • 如何修改快捷键
    在这里插入图片描述
  1. 导入该行需要的类
    • 先配置auto import
      在这里插入图片描述
    • 然后使用alt+enter
  2. 快速格式化代码
    ctrl+alt+L
  3. 快速运行程序(自己定义)
    alt+R
  4. 生成构造器等 alt + insert [提高开发效率]
    在这里插入图片描述
    在这里插入图片描述
  5. 查看一个类的层级关系 ctrl + H [学习继承后,非常有用]
  6. 将光标放在一个方法上,输入 ctrl + B , 可以定位到方法 [学继承后,非常有用]
  7. 自动的分配变量名 , 通过 在后面 + .var

模板/自定义模板

  • main + 回车
  • sout + 回车
  • fori + 回车
    在这里插入图片描述

二、包package

1. 基本介绍

  • 一个应用场景:两个程序员都想定义一个类,名为Dog

  • 包的三大作用

    • 区分相同名字的类
    • 当类很多时,可以很好地管理类(查看API文档)
    • 控制访问范围
  • 基本语法

package com.hspedu;
//1.package 关键字,表示打包
//2.com.hspedu 表示包名
com 是一级目录  hspedu 是下一级目录

在这里插入图片描述

  • 原理:实际上就是创建不同的文件夹(目录)来保存类文件
    在这里插入图片描述
  • 快速入门
    在这里插入图片描述
    在这里插入图片描述

2. 包的命名规范

  • 命名规则只能包含数字、字母、下划线、小圆点,但不能用数字开头,不能是关键字或保留字
    在这里插入图片描述
  • 命名规范:一般是小写字母 + 小圆点
    在这里插入图片描述

3. 常用的包和如何引入

  • 常用的包
    一个包下,包含很多的类,java 中常用的包有:

    • java.lang.*
      lang 包是基本包,默认引入,不需要再引入
    • java.util.*
      util 包,系统提供的工具包, 工具类,使用 Scanner
    • java.net.*
      网络包,网络开发
    • java.awt.*
      是做 java的界面开发GUI
  • 如何引入包

    • 语法:import 包;
    • 主要目的:使用该包下面的一个类
      比如importjava.util.Scanner; 就只是引入一个类Scanner
      import java.util.*; 表示将java util 包所有都引入
    • 案例:使用系统自带类进行排序
      在这里插入图片描述

4. 注意事项和细节

  • package 的作用是声明当前类所在的包,需要放在class的最上面,一个类最多只有一句package
  • import 指令 位置放在package的下面,在类定义前面,可以有多句且没有顺序要求
    在这里插入图片描述

三、访问修饰符(四类)

java 提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围):

  • 公开级别: 用 public 修饰, 对外公开

  • 受保护级别: 用 protected 修饰,对子类和同一个包中的类公开

  • 默认级别: 没有修饰符号, 向同一个包的类公开

  • 私有级别: 用 private 修饰, 只有类本身可以访问, 不对外公开

在这里插入图片描述

  • 同类中,都可以使用
    在这里插入图片描述

  • 同包中,私有无法访问 只有n1, n2, n3 可选
    在这里插入图片描述

  • 子类中,只能访问 public 和 protected

  • 不同包中,只有 public 类可以访问,只有n1可以选 use包 和 qiang包
    在这里插入图片描述

四、封装Encapsulation(重点)

1. 封装介绍

  • 面向对象编程三大特征:封装、继承和多态

  • 封装(encapsulation)就是把抽象的数据[属性]和对数据的操作[方法]封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作[方法],才能对数据进行操作

  • 封装的理解和好处

    • 隐藏实现细节:方法<–调用
    • 可以对数据进行验证,保证安全合理

2. 封装步骤

  • 将属性进行私有化 private 【不能直接修改属性】
  • 提供一个公共的 (public) set方法,用于对属性判断并赋值
  • 提供一个公共的get方法,用于获取属性的值

3. 快速入门

在这里插入图片描述

package com.mucy.encap;public class Encapusulation01 {public static void main(String[] args) {Person person = new Person();person.setName("jack");person.setAge(33);person.setSalary(30000);System.out.println(person.info());}
}class Person {public String name;private int age;private double salary;/* public void setName(String name) {this.name= name;}public String getName() {return name;} *///自己写set xxx  get xxx 太慢,用快捷键//Alt + insert 选择setter and getter//对代码进行完善public String getName() {return name;}public void setName(String name) {//加入对数据的校验if(name.length() >= 2 && name.length() <= 6) {this.name = name;} else {System.out.println("名字有误");this.name = "无名";}}public int getAge() {return age;}public void setAge(int age) {if(age >= 1 && age <= 120) {this.age = age;} else {System.out.println("信息有误");this.age = 22;}}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}//写一个方法,返回属性信息public String info() {return "信息为 name= " + name + " age= " + age + " 薪水= " + salary;}
}

4. 封装与构造器

将构造器与set xxx 结合
在这里插入图片描述

五、继承(重点)

1. 为什么需要继承

观察以下两个代码,发现大学生和小学生考试两个类的很多属性都是相同的

解决方法:用继承解决代码复用性
在这里插入图片描述

2. 继承原理图

  • 继承基本介绍和示意图
    • 介绍:继承可以解决代码复用,让我们的编程更加靠近人类思维。当多个类存在相同的属性(变量)和方法时,可以从这些类中 抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过 extends 来 声明继承父类即可。
  • 示意图:
    在这里插入图片描述
  • 继承的基本语法
    class 子类 extends 父类
    • 子类自动拥有父类的属性和方法

3. 快速入门

使用之前的案例,改进
在这里插入图片描述

4. 继承的优点

  • 代码的复用性提高了
  • 代码的扩展性和维护性提高了

5. 使用细节

  • 细节1

    • 子类继承了所有的属性和方法,(通过debug查看)
      在这里插入图片描述
    • 非私有的属性和方法可以在子类直接访问,但是私有属性和方法不能在子类直接访问
      在这里插入图片描述
    • 要通过父类提供公共的方法去访问
      在这里插入图片描述
  • 细节2子类必须调用父类的构造器, 完成父类的初始化
    在这里插入图片描述

    • 默认创建super(), 调用了父类的构造器,父类先被调用
  • 细节3

    • 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器
    • 如果父类没有提供无参构造器
      在这里插入图片描述
    • 则必须在子类的构造器中用 super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过
      在子类的每个构造器中指定父类的构造器
      在这里插入图片描述
  • 细节4:如果希望指定去调用父类的某个构造器,则显式的调用一下 : super(参数列表)
    在这里插入图片描述

  • 细节5super在使用时,需要放在构造器的第一行

  • 细节6:super() this() 都只能放在构造器的第一行,因此两个方法不能共存在一个构造器

  • 细节7:java 所有类都是 Object 类的子类 CTRL + H 查看
    在这里插入图片描述

  • 细节8:父类构造器的调用不限于直接父类 将一直往上追溯直到 Object 类(顶级父类)

  • 细节9:子类最多只能继承一个父类(指直接继承),即 java 中是单继承机制。
    思考:如何让 A 类继承 B 类和 C 类? 【A 继承 B, B 继承 C】

  • 细节10:不能滥用继承,子类和父类之间必须满足 is-a 的逻辑关系

6. 继承的本质(重要)

在这里插入图片描述

public class ExtendsTheory {public static void main(String[] args) {Son son = new Son(); //内存的布局 如上图?-> 这时请大家注意,要按照查找关系来返回信息// (1) 首先看子类是否有该属性// (2) 如果子类有这个属性,并且可以访问,则返回信息// (3) 如果子类没有这个属性,就看父类有没有这个属性(如果父类有该属性,并且可以访问,就返回信息..)// (4) 如果父类没有就按照(3)的规则,继续找上级父类,直到 Object...System.out.println(son.name); //返回 儿子System.out.println(son.age); //返回 39System.out.println(son.hobby); //返回 旅游}
}
class GrandPa {String name = "爷爷";String hobby = "旅游";
}
class Father extends GrandPa {String name = "爸爸";int age = 39;
}
class Son extends Father {String name = "儿子";
}

总结

前面我们用sublime Text记事本学习了面向对象初级的内容,从这一章节开始,我们正式使用idea集成开发工具,学习和锻炼更为复杂的编程能力,同时也是对面向对象内容的更深度学习,包括包、封装、继承、重写、多态、转型、断点调试等内容。

受篇幅限制,本篇文章是韩顺平老师课程P264-P296(第8章:面向对象编程中级)上半部分重点内容的详细总结。

  1. IDEA常用快捷键与模板
  2. 包的使用与规范
  3. 访问修饰符
  4. 封装(重点)
  5. 继承(重点)

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

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

相关文章

SpringCloud Nacos的配置与使用

Spring Cloud Nacos的配置与使用 文章目录 Spring Cloud Nacos的配置与使用1. 简单介绍2. 环境搭建3. 服务注册/服务发现4. Nacos 负载均衡4.1 服务下线4.2 权重配置4.3 同集群优先访问 5. Nacos 健康检查5.1 两种健康检查机制5.2 服务实例类型 6.Nacos 环境隔离6.1 创建namesp…

【MySQL进阶之路 | 高级篇】表级锁之S锁,X锁,意向锁

1. 从数据操作的粒度划分&#xff1a;表级锁&#xff0c;页级锁&#xff0c;行锁 为了尽可能提高数据库的并发度&#xff0c;每次锁定的数据范围越小越好&#xff0c;理论上每次只锁定当前操作的数据的方案会得到最大的并发度&#xff0c;但是管理锁是很耗资源的事情&#xff…

驾驭代码的无形疆界:动态内存管理揭秘

目录 1.:为什么要有动态内存分配 2.malloc和free 2.1:malloc 2.2:free 3.calloc和realloc 3.1:calloc 3.1.1:代码1(malloc) 3.1.2:代码2(calloc) 3.2:realloc 3.2.1:原地扩容 3.2.2:异地扩容 3.2.3:代码1(原地扩容) 3.2.3:代码2(异地扩容) 4:常见的动态内存的错误…

vite + xlsx + xlsx-style 导出 Excel

如下 npm i 依赖 npm i xlsxnpm i xlsx-style-vite1、简单的使用&#xff1a;.vue文件中使用 const dataSource ref([]) // 数据源const columns [{title: 用户名,key: userName,width: 120,},{title: 用户组,key: userGroup,width: 120,},{title: 状态,key: enable,width: …

鸿蒙(HarmonyOS)下拉选择控件

一、操作环境 操作系统: Windows 11 专业版、IDE:DevEco Studio 3.1.1 Release、SDK:HarmonyOS 3.1.0&#xff08;API 9&#xff09; 二、效果图 三、代码 SelectPVComponent.ets Component export default struct SelectPVComponent {Link selection: SelectOption[]priva…

浅谈我对RESTful架构的理解

总结说在前面&#xff1a; RESTful API是目前比较成熟的一套互联网应用程序的 API 设计理论&#xff0c;他是一种理论规范&#xff0c;方便不同的前端设备与后端进行通信&#xff0c;在 RESTful 风格的 API 设计架构中&#xff0c;每个网址代表一种资源&#xff08;resource&am…

maven介绍 搭建Nexus3(maven私服搭建)

Maven是一个强大的项目管理工具&#xff0c;它基于项目对象模型&#xff08;POM&#xff1a;Project Object Model&#xff09;的概念&#xff0c;通过XML格式的配置文件&#xff08;pom.xml&#xff09;来管理项目的构建 Maven确实可以被视为一种工程管理工具或项目自动化构…

飞凌嵌入式技术创新日深圳站,8月26日见!

飞凌嵌入式技术创新日&#xff08;深圳站&#xff09;将于8月26日举行&#xff0c;一场嵌入式前沿科技的高端局就在眼前。届时&#xff0c;将有多位重量级技术大咖出席&#xff0c;为大家分享最新的研究成果、独到的行业见解和典型的应用案例&#xff0c;紧密结合当前行业热点和…

网络服务综合项目(一键部署shell脚本)

目录 需求&#xff1a; 主机环境描述 注意&#xff1a; 项目需求&#xff1a; 代码讲解 配置本地仓库 安装软件包 配置防火墙 配置策略中的一个布尔值 配置web服务 配置网络仓库 配置DNS服务 配置NTP服务 配置MySQL服务 配置NFS服务 配置论坛服务 进入网站配置…

Python数据分析案例55——基于LSTM结构自编码器的多变量时间序列异常值监测

案例背景 时间序列的异常值检测是方兴未艾的话题。比如很多单变量的&#xff0c;一条风速&#xff0c;一条用电量这种做时间序列异常值检测&#xff0c;想查看一下哪个时间点的用电量异常。 多变量时间序列由不同变量随时间变化的序列组成&#xff0c;这些时间序列在实际应用…

小黄人欢乐来袭,国漫萌物大集结

最近上映的《神偷奶爸》4不知道大家有没有去看&#xff0c;小黄人作为该系列电影的标志性角色&#xff0c;继续以其呆萌可爱的形象和幽默搞怪的性格赢得了观众的喜爱。 在中国动漫中&#xff0c;也有许多可爱且深受观众喜爱的萌物角色。这些角色以其独特的形象、有趣的性格和与…

数据结构day6

一、思维导图 二、模拟面试 typedef定义函数指针的方式typedef int(*p)(int,int);对void*指针的理解&#xff0c;相关应用万能指针&#xff0c;可以定义形参用来接收任意类型的指针变量&#xff0c;也可以定义函数用来返回任意类型的指针变量例如malloc函数在堆区申请内存&…

HTTP协议和RPC协议的区别是什么

从功能层面来说&#xff0c;HTTP协议是一个应用层的超文本传输协议&#xff0c;它是万维网数据通信的一个基础&#xff0c;主要服务在网页端和服务端的一个数据传输上。而RPC是一个远程过程调用协议&#xff0c;它是定位在实现分布式应用之间的一个数据通信&#xff0c;屏蔽了通…

SpringBoot入门:如何新建SpringBoot项目(保姆级教程)

在本文中&#xff0c;我们将演示如何新建一个基本的 Spring Boot 项目。写这篇文章的时候我还是很惊讶的&#xff0c;因为我发现有些java的初学者&#xff0c;甚至工作10年的老员工居然并不会新建一个SpringBoot项目&#xff0c;所以特别出了一篇文章来教大家新建一个SpringBoo…

数据挖掘-数据预处理

来自&#x1f96c;&#x1f436;程序员 Truraly | 田园 的博客&#xff0c;最新文章首发于&#xff1a;田园幻想乡 | 原文链接 | github &#xff08;欢迎关注&#xff09; 文章目录 3.3.1 数据的中心趋势平均数和加权平均数众数&#xff0c;中位数和均值描述数据的离散程度 &a…

VSCode | 修改编辑器注释的颜色

1 打开VsCode的设置进入settings.json 2 添加如下代码 "editor.tokenColorCustomizations": {"comments": "#17e917"},3 保存即可生效

Linux源码阅读笔记14-IO体系结构与访问设备

IO体系结构 与外设通信通常称为输入输出&#xff0c;一般缩写为I/O。在实现外设IO的时候&#xff0c;内核必须处理三个可能出现的问题&#xff1a; 必须根据具体的设备类型和模型&#xff0c;使用各种方法对硬件寻址。内核必须向用户应用程序和系统工具提供访问各种设备的方法…

hugging face 使用教程———快速入门

概述 本篇存在的意义是快速介绍hugging face使用&#xff0c;梳理主要部件&#xff0c;梳理易混淆概念。原因是&#xff1a;目前hugging face的使用&#xff0c;官方放在了3个地方&#xff08;参考链接部分&#xff09;&#xff1a;使用文档、NLP教程、Transformers git的readm…

Vue3+Element Plus 实现table表格中input的验证

实现效果 html部分 <template><div class"table"><el-form ref"tableFormRef" :model"form"><el-table :data"form.detailList"><el-table-column type"selection" width"55" align&…

基于springboot+vue+uniapp的养老院系统小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…