Java学习笔记(七)面向对象编程(中级部分)

ops/2024/12/22 3:01:41/

Hi i,m JinXiang


⭐ 前言 ⭐

本篇文章主要介绍Java面向对象编程(中级部分)包、访问修饰符、封装、继承、super关键字、多态、向上(下)转型、equals、hashCode、断点调试等知识的详细使用以及部分理论知识


🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁

🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言


目录

1、包

包的三大作用

包的基本语法

包的本质

快速入门

包的命名

常用的包

如何引入包

注意事项和使用细节

2、访问修饰符

基本介绍

4种访问修饰符的访问范围

使用访问修饰符的注意事项

3、OOP三大特征(封装、继承、多态)

3.1、封装

封装介绍

封装的理解和好处

封装实现的步骤

快速入门

 封装与构造器

3.2、继承

为什么学继承?

继承基本介绍和示意图

继承的基本语法

继承快速入门

继承给编程带来的遍历

继承的深入探讨/细节问题

继承的本质

3.3、多态

4、Super关键字

基本介绍

基本语法

super给编程带来的遍历/细节

super和this的比较

5、方法重写/覆盖(overwrite)

基本介绍

方法重写快速入门

方法重写/覆盖注意事项和使用细节

方法重写和方法重载的区别

6、Object类详解,垃圾回收机制

7、项目


1、包

包的三大作用

  • 1、区分相同名字的类
  • 2、当类很多时,可以很好的管理类
  • 3、控制访问范围

包的基本语法

package com.hspedu;

  • 说明:
  • 1、package 关键字,表示打包.
  • 2、com.hspedu 表示包名

包的本质

包的本质就是创建不同的文件夹/目录来保存类文件

快速入门

在不同的目录/文件夹下创建相同名称的类

包的命名

常用的包

一个包下, 包含很多的类 ,java 中常用的包有 :
  • 1) java.lang.*
    • //lang 包是基本包,默认引入,不需要再引入.
  • 2) java.util.*
    • //util 包,系统提供的工具包, 工具类,使用 Scanner
  • 3) java.net.*
    • //网络包,网络开发
  • 4) java.awt.* //是做 java 的界面开发,GUI

如何引入包

用哪个就导入哪个

注意事项和使用细节

  • 1、package 的作用是声明当前类所在的包,需要放在类的最上面,一个类中最多只有一局package
  • 2、import指令 位置放在package的下面,在类定义前面,可以有多句且没有顺序要求。

2、访问修饰符

基本介绍

java 提供四种访问控制修饰符号,用于控制方法和属性 ( 成员变量 ) 的访问权限(范围) :
  • 1) 公开级别:public 修饰,对外公开
  • 2) 受保护级别:protected 修饰,对子类和同一个包中的类公开
  • 3) 默认级别:没有修饰符号,向同一个包的类公开.
  • 4) 私有级别:private 修饰,只有类本身可以访问,不对外公开.

4种访问修饰符的访问范围

使用访问修饰符的注意事项

  • 1)修饰符可以用来修饰类中的属性,成员方法以及类
  • 2)只有默认的和public才能修饰类!,并且遵循上述访问权限的特点。
  • 3)因为没有学习继承,因此关于在子类中的访问权限,我们讲完子类后,在回头讲解4)成员方法的访问规则和属性完全一样.

//com.hspedu.modifier:需要很多文件来说明(A类,B类, Test类.….

3、OOP三大特征(封装、继承、多态)

3.1、封装

封装介绍

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

封装的理解和好处

  • 1、隐藏实现细节:方法(连接数据库)<--调用(传入参数)
  • 2、可以对数据进行验证,保证安全合理

封装实现的步骤

  • 1、将属性进行私有化private【不能直接修改属性】
  • 2、提供一个公共的(public)set方法,用于对属性判断并赋值
    •  public void setXxx(类型参数名) {//Xxx表示某个属性
    • //加入数据验证的业务逻辑
    • 属性=参数名;
    • }
  • 3、提供一个公共的(public)get方法,用于获取属性的值
    • public 数据类型getXxx() {//权限判断, Xxx某个属性
    • return xx;
    • }

快速入门

案例:请大家看一个小程序 不能随便查看人的年龄,工资等隐私,并对设置的年龄进行合理的验证。年龄合理就设置,否则给默认"年龄必须在1-120,年龄,工资不能直接查看,name的长度在2-6之间
代码:

java">package 封装;
public class 快速入门案例 {// 不能随便查看人的年龄,工资等隐私,并对设置的年龄进行合理的验证。// 年龄合理就设置,否则给默认"年龄必须在1-120,年龄,工资不能直接查看,// name的长度在2-6之间。public static void main(String[] args) {Person person = new Person();person.setName("jack");person.setAge(30);person.setSalary(3030);person.info();}
}
class Person{public String name; //名字公开private int age; //年龄私有private double salary;//...public String getName() {return name;}public void setName(String name) {//加入读数据的校验,相当于增加业务逻辑if (name.length() >=2 && name.length()<=6){this.name = name;}else {System.out.println("名字的长度不对,需要大于2小于6,默认名字");this.name = "无名";}}public int getAge() {return age;}public void setAge(int age) {//添加判断if (age>=1 && age <=120){this.age = age;}else {System.out.println("设置的年龄不正确,需要在1到120之间,给年龄设置了默认值18");this.age = 18;//给一个默认年龄}}public double getSalary() {//可以增加一个对当前对象的权限判断return salary;}public void setSalary(double salary) {this.salary = salary;}public void info(){System.out.println("姓名:"+name+" 年龄:"+age+" 薪水:"+salary);}
}

 封装与构造器

java">//使用构造器指定属性
Person smith = new Person("smith", 120, 30000);
System.out.println("===smith的信息===");
System.out.println(smith.info());
java">//无参构造器public Person() {}//有三个属性的构造器public Person(String name, int age, double salary) {/*this.name = name;this.age = age;this.salary = salary;*///验证数据:把set写在构造器中setName(name);//这样写的话,下面set中的数据校验和判断在构造器中也能使用setAge(age);setSalary(salary);}

3.2、继承

为什么学继承?

一个小问题,还是看个程序,提出代码复用的问题。
我们编写了两个类,一个是Pupil类(小学生),一个是Graduate(大学毕业生).问题:两个类的属性和方法有很多是相同的,怎么办?
=>继承(代码复用性~)

继承基本介绍和示意图

可以解决代码复用 , 让我们的编程更加靠近人类思维 . 当多个类存在相同的属性 ( 变量 ) 和方法时 , 可以从这些类中 抽象出父类, 在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过 extends 来 声明继承父类即可。

继承的基本语法

class 子类 extends 父类{

}

  • 1、子类就会自动拥有父类定义的属性和方法
  • 2、父类又叫超类,基类
  • 3、子类又叫派生类

继承快速入门

目录

Student父类
java">//父类,是pupil和graduate的父类
public class Student {//共有属性public String name;public int age;public double score;//共有的方法public void setScore(double score) {this.score = score;}public void info(){System.out.println("学生名:"+name+" 年龄"+age+" 成绩:"+score);}
}
小学生Pupil子类
java">//让pupil继承student类
public class Pupil extends Student {//小学生public void testing(){System.out.println("小学生"+ name +" 正在考小学数学..");}
}
大学生Graduate子类
java">//让pupil继承student类
public class Graduate extends Student {//大学毕业生public void testing(){System.out.println("大学生"+ name +" 正在考小学数学..");}
}
Test测试类
java">public class Test {public static void main(String[] args) {Pupil pupil = new Pupil();pupil.name = "银角大王";pupil.age = 10;pupil.testing();pupil.setScore(60);pupil.info();System.out.println("=========");Graduate graduate = new Graduate();graduate.name = "金角大王";graduate.age = 22;graduate.testing();graduate.setScore(100);graduate.info();}
}

继承给编程带来的遍历

  • 1、代码的复用性提高了
  • 2、代码的扩展性和维护下提高了

继承的深入探讨/细节问题

  • 1) 子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问, 但是私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问
  • 2) 子类必须调用父类的构造器, 完成父类的初始化
  • 3) 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用 super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过
  • 4) 如果希望指定去调用父类的某个构造器,则显式的调用一下 : super( 参数列表 )
  • 5) super 在使用时,必须放在构造器第一行 (super 只能在构造器中使用 )
  • 6) super() 和 this() 都只能放在构造器第一行,因此这两个方法不能共存在一个构造器
  • 7) java 所有类都是 Object 类的子类 , Object 是所有类的基类 .
  • 8) 父类构造器的调用不限于直接父类!将一直往上追溯直到 Object ( 顶级父类 )
  • 9) 子类最多只能继承一个父类 ( 指直接继承 ) ,即 java 中是单继承机制
  • 10) 不能滥用继承,子类和父类之间必须满足 is-a 的逻辑关系

继承的本质

本质详解0293_韩顺平Java_继承本质详解_哔哩哔哩_bilibili

3.3、多态

4、Super关键字

基本介绍

super代表父类的引用,用于访问父类的属性、方法、构造器

基本语法

  • 1、访问父类的属性,但不能访问父类的private属性 【super.属性名;
  • 2、访问父类的方法,不能访问父类的private方法 【super.方法名(参数列表)
  • 3、访问父类的构造器  【super(参数列表);】只能放在构造器的第一句,只能出现一句!

super给编程带来的遍历/细节

  • 1、调用父类的构造器的好处:分工明确,父类属性由父类初始化,子类的属性由子类初始化
  • 2、当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super。如果没有重名,使用super、this、直接访问是一样的效果!
  • 3.、super的访问不限于直接父类,如果爷爷类和本类中有同名的成员,也可以使用
    super去访问爷爷类的成员;如果多个基类(上级类)中都有同名的成员,使用st访问遵循就近原则。A->B->C,当然也需要遵守访问权限的相关规则

super和this的比较

5、方法重写/覆盖(overwrite)

基本介绍

方法覆盖(重写)就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的方法

方法重写快速入门

方法重写/覆盖注意事项和使用细节

  • 1、子类的方法的形参列表,方法名称,要和父类方法的形参列表方法名称完全一样。【演示】
  • 2、子类方法的返回类型和父类方法返回类型一样,或者是父类返回类型的子类比如父类返回类型是 Object ,子类方法返回类型是String【演示】
  • 3、子类万法不能缩小父类方法的访问权限【演示】public >protected >默认>private

方法重写和方法重载的区别

6、Object类详解,垃圾回收机制

7、项目

总结不易,希望宝宝们不要吝啬亲爱的👍哟(^U^)ノ~YO!如有问题,欢迎评论区批评指正😁


http://www.ppmy.cn/ops/86275.html

相关文章

【b站-湖科大教书匠】5 运输层 - 计算机网络微课堂

课程地址&#xff1a;【计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;】 https://www.bilibili.com/video/BV1c4411d7jb/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 5 运输层 5.1 运输层概述 5.2 运输层端口号、复用与分用…

java发送https请求支持tls1.3

说明&#xff1a;java 8_u201及以下版本不支持tls1.3协议发送。最直接的方法是升级到该版本之上。 另外&#xff1a;需要修改一下代码强行使用tls1.3协议。如果只修改代码&#xff0c;不升级java版本会报错找不到该协议。

如何从零搭建一个动态网站

静态网站和动态网站的区别 静态网站和动态网站的本质区别在于内容是否在服务器端动态生成&#xff0c;以及是否有服务器端逻 辑处理用户请求和数据。 静态网站像是一本已经印刷好的书籍&#xff0c;而动态网站则像是根据读者需求即时编写和提供内容 的智能机器。 创建动态网…

C++20之设计模式:观察者模式

观察者模式 观察者属性观察者Observer\<T>Observable<T> 连接观察者和被观察者依赖问题取消订阅和线程安全 可重入通过 Boost.Signals2 来实现 Observer总结 观察者 观察者模式是一种流行且必需的模式&#xff0c;QT的信号槽机制本质上就是观察者模式。 属性观察…

05 循环神经网络

目录 1. 基本概念 2. 简单循环网络 2.1 简单循环网络 2.2 长程依赖问题 3. 循环神经网络的模式与参数学习 3.1 循环神经网络的模式 3.2 参数学习 4. 基于门控的循环神经网络 4.1 长短期记忆网络 4.2 LSTM网络的变体网络 4.3 门控循环单元网络 5. 深层循环神经网络…

谷粒商城实战笔记-56~57-商品服务-API-三级分类-修改-拖拽功能完成

文章目录 一&#xff0c;56-商品服务-API-三级分类-修改-拖拽功能完成二&#xff0c;57-商品服务-API-三级分类-修改-批量拖拽效果1&#xff0c;增加按钮2&#xff0c;多次拖拽一次保存完整代码 在构建商品服务API中的三级分类修改功能时&#xff0c;拖拽排序是一个直观且高效的…

怎么将jpg图片转换为pdf?将jpg图片转换为pdf的几种方法介绍

怎么将jpg图片转换为pdf&#xff1f;转换jpg图片为PDF是一项常见的任务&#xff0c;无论是个人用户还是商业环境中都经常会遇到这种需求。将多张jpg图像合并成一个单一的PDF文件可以带来诸多便利&#xff0c;例如便于存档、分享和打印。这种转换不仅简化了文件管理流程&#xf…

OCCT使用指南:Foundation Classes

1、介绍 本手册解释了如何使用Open CASCADE Technology (OCCT) Foundation Classes。它提供了关于基础类的基础文档。有关基础类及其应用的高级信息&#xff0c;请参阅我们的电子学习和培训产品。 基础类提供各种通用服务&#xff0c;如自动动态内存管理&#xff08;通过句柄操…