day08_面向对象_封装_继承_this_super_访问修饰符

今日内容

1.作业
2.封装
3.继承
4.this和super
5.访问修饰符

零、复习

成员变量和局部变量(画表格)

this的作用

  • this是当前对象,当前方法的调用者
  • this可以调用属性和方法
  • this.属性, this.方法名(),this()

构造方法的作用和语法特征

  • 作用: 创建对象,属性初始化
  • 特征: 没有返回值,没有void,方法名是类名

有参无参构造的区别

  • 无参创建出的对象属性是默认值
  • 有参创建出的对象属性是指定值

重载的语法要求

  • 在同一类中,方法名,参数列表不一样

一、作业

1.1 关于引用类型的题目

pdf5,t4,5,9,14 都是

解题思路
* 1 方法执行进栈,执行完弹栈
* 2 凡是new都会在堆中创建对象
* 3 基本数据类型,赋值是直接将数据复制一份传递
*   引用数据类型(数组,类,接口),赋值是将地址值赋值一份传递
* 4 成员变量在堆中(在堆中的对象中)
*   局部变量在栈中(在栈中的方法中)
----------------------
多画内存图,多读代码

1.2 类中定义类属性

有工人(Worker)类,有地址(Address)类

工人类中定义属性addr,该属性是Address类型的
工人类中定义属性age,该属性是int类型

public class Worker {/*** 属性,就是变量* 数据类型 变量名;* 基本数据类型/引用数据类型*/String name;int age;double salary;// 薪水Address addr; // Address属性//....
}public class TestWorker {public static void main(String[] args) {// 创建一个Worker 对象,其姓名为"zhangsan",年龄为25,工资为2500,// 家庭住址为“北京市海淀区清华园1 号”,邮政编码为100084。Worker worker = new Worker( );System.out.println(worker.age);// 0System.out.println(worker.salary);// 0.0System.out.println(worker.name);// nullSystem.out.println(worker.addr);// nullworker.age = 25;worker.salary =2500;worker.name = "张三";/*** NullPointerException* 空指针异常* 指针就是引用* 空指针即空引用,空对象* ------------------* 凡是空指针异常,就是在拿着一个空对象在调用属性或者方法*/// worker.addr.address = "航海路60号";worker.addr = new Address(  );worker.addr.address = "航海路60号";worker.addr.zipCode = "450000";System.out.println(worker.name );System.out.println(worker.age );System.out.println(worker.salary );System.out.println(worker.addr.address );System.out.println(worker.addr.zipCode);}}

image-20231018100730733

练习题

  • 部门类(Dept)

    • 属性 部门编号,部门名称
  • 员工类(Emp)

    • 属性 姓名,工号,职位
  • 部门类中设置属性emp,属性为Emp

  • 创建部门类对象,给每个属性赋值

二、封装

在这之前,学习的

  • 类,属性,方法
  • 创建对象
  • 内存关系
  • 构造方法
  • 引用类型的理解

都是面向对象的基础知识


面向对象的核心

  • 封装
  • 继承
  • 多态

2.1 封装

封装: 就是将代码封装起来,方便使用

比如: 快递包裹,手机,电脑

作用: 将一些实现的动作隐藏起来,只需要关心如何使用


封装可以分为

  • 方法的封装
  • 属性的封装
  • 类的封装(多个类,组成一个庞大系统)

2.2 属性的封装

为什么要封装属性? 因为现在是直接通过对象操作属性,这样不安全

怎么封装?

  • 属性私有化,设置private修饰符
  • 设计方法
    • setXxx 给属性赋值
    • getXxx 取出属性值

重要: 以后写项目,工作中属性封装都是固定格式(属性私有,setget方法)

  • 给属性赋值的方法名 必须叫set,后面必须跟属性名,例如 setAge
  • 获得属性值的方法名,必须叫get,后面必须跟属性名,例如 getAge
 /* @desc  属性封装演示*/
public class Phone {/*** 属性就是变量,* 特殊的是前面可以使用修饰符,例如public* 现在属性要封装,就要将其私有,就是写private*/private String brand;// 品牌private double price;/*** 设计方法对属性封装,封装成方法* 有了方法后就可以对属性做一些操作*/// setXxx给属性赋值public void setPrice(double price) {if (price >= 0) {this.price = price;} else {System.out.println("价格有误!" );}}// getXxx用于取出属性值public double getPrice(){return price;}public void setBrand(String brand){this.brand = brand;}public String getBrand(){return brand;}
}

// 测试

public class TestPhone {public static void main(String[] args) {// 创建对象Phone phone = new Phone( );// 属性赋值// phone.price = -3999;// 属性私有了,不能再直接通过对象调用// 调用set方法给属性赋值phone.setPrice(3999);// 调用get方法获得属性值double price = phone.getPrice( );System.out.println(price );}
}

三、继承【重点】

3.1 继承

什么是继承? 子级(子类) 从父级(父类) 获得它们的东西(属性,方法)

为什么需要继承?

  • 将多个类重复代码向上抽取到父类,子类复用
  • 继承是多态的前提

代码写继承? class A extends B ,就是继承,读作A类继承B类,A是子类,B是父类

// 父类
public class Animal {int age;String  name;public void eat(){System.out.println("吃 " );}
}
// 子类Dog继承Animal/* @desc 狗类继承Animal动物类* 狗类是子类* 动物是父类*/
public class Dog extends Animal{// 继承
}
// 测试
public class TestExtends {public static void main(String[] args) {Dog dog = new Dog();dog.eat();// 调用父类中的方法System.out.println(dog.age );// 调用的是父类中的属性}
}

3.2 继承特点

java中类只能单继承,即一个类只能继承一个类,不能出现两个父类

image-20231018150735648

支持层次继承(多级继承)

image-20231018151218193

子类继承父类**,可以使用父类非私有修饰的属性和方法**

image-20231018151845476

3.3 继承中的属性

  • 子类继承父类只能使用父类非私有属性
  • 特殊的,某一个属性,父类中 子类中都有,子类默认使用自己的属性

3.4 继承中的方法

  • 子类继承父类,只能使用父类中非私有的方法
  • 特殊的,某一个方法,父类中 子类中都有,子类默认使用自己的方法
    • 这就是方法的重写(Override)

3.5 方法重写

方法重写又叫方法覆盖,方法覆写

什么是重写? 在继承中,子类重写了父类方法(子类和父类方法签名一样,但是方法体不一样)

为什么需要重写?

  • 继承的目的是为了使用父类的属性和方法
  • 但是有些时候子类在使用父类方法时,不适用于自己,所以需要重写
  • 这也是多态前提

如何写?

  • 子类继承父类
  • 子类中写一个与父类方法
    • 访问修饰符一样
    • 返回值类型一样
    • 方法名一样
    • 参数列表一样
    • 方法体不一样
  • 的方法就是重写

image-20231018160019297

3.6 继承中的构造方法

在创建子类时会先创建父类对象

调用子类构造方法创建子类对象时,会 调用父类构造方法创建父类对象

  • 机制: 每个类的每个构造方法第一行都隐藏了一个super()在调用父类无参构造

创建对象的过程

  • 调用子类构造方法创建对象
  • 先父类属性初始化
  • 再执行父类构造方法内代码
  • 后再子类属性初始化
  • 最后再子类构造方法内代码执行

总结:

  • 整体是有父类先执行父类,后子类
  • 具体到类中,先初始化属性再执行构造方法

四、this和super

thissuper
代表代表当前类对象代表父类对象
调用属性this.属性(子类属性,子类没有也会调用父类属性)super.属性(父类属性)
调用方法this.方法()(子类方法,子类没有也会调用父类方法)super.方法()(父类方法)
构造方法this() 调用自己无参构造
this(参数) 调用自己有参构造
super() 调用父类无参构造
super(参数) 调用父类有参构造

ps: 调用构造方法的语句必须放在构造方法内的第一行

五、单词

private 私有
extends 继承
super 父
sub 子

六、总结

封装: 属性私有提供setget方法固定写法,可以生产
继承:注意继承中特性(属性,方法,构造)
重写的知识(知道语法)
this和super知识(知道怎么用)

作业

不用重复代码,应该按照笔记中写的特性,自己建类实现这些特性
重写和重载总结表格
写两道关于继承的题(很重要)pdf6-t19,t24

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

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

相关文章

STM32的hex文件格式的分析

前言 最近研究Bootloader,通过串口实现STM32程序的更新。需要学习了解STM32的Hex文件格式。在这进行一下总结。 HEX文件格式 我们通过文本形式打开hex文件,可以看到: 这一行就是一条指令数据,这里对数据帧格式进行说明&#xff…

图像检索算法 计算机竞赛

文章目录 1 前言2 图像检索介绍(1) 无监督图像检索(2) 有监督图像检索 3 图像检索步骤4 应用实例5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 图像检索算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐&#xff…

金融数学方法:有限差分法

目录 1.原理介绍 1.1 有限差分法介绍 1.2 有限差分法步骤 2.案例分析 2.1 问题重述 2.2 问题求解 1.原理介绍 1.1 有限差分法介绍 有限差分法是一种常用的数值计算方法,用于求解偏微分方程或常微分方程的数值解。它的基本思想是将连续的空间区域离散化为有限…

mysql按照日期分组统计数据(date_formatstr_to_date)

学习链接 mysql按照日期分组统计数据 博主-山茶花开时的 【Mysql专栏学习】 mysql按照日期分组统计数据 Mysql的date_format函数想必大家都使用过吧,一般用于日期时间转化,如下所示 # 可以得出 2023-01-01 08:30:50 select DATE_FORMAT(2023-01-01…

【无标题】光伏逆变器的IEC62109测试,逆变器IEC62109测试项目

光伏逆变器的IEC62109测试,逆变器IEC62109测试项目 逆变器又称电源调整器,根据逆变器在光伏发电系统中的用途可分为独立型电源用和并网用二种。根据波形调制方式又可分为方波逆变器、阶梯波逆变器、正弦波逆变器和组合式三相逆变器。对于用于并网系统的…

【Qt控件之QListWidget】介绍及使用,利用QListWidget、QToolButton、和布局控件实现抽屉式组合控件

概述 QListWidget类提供了基于项目的列表小部件。 QListWidget是一个方便的类,类似于QListView提供的列表视图,但使用经典的基于项目的接口来添加和删除项目。QListWidget使用内部模型来管理列表中的每个QListWidgetItem。 对于更灵活的列表视图小部件…

C++实现AC自动机,剪枝、双数组压缩字典树!详解双数组前缀树(Double-Array Trie)剪枝字典树(Patricia Trie)

代码在:github.com/becomequantum 最近研究了一下字典树,什么AC自动机,双数组压缩字典树,剪枝字典树都自己写代码实现了一下。这本该是本科学数据结构时该玩明白的东西,我到现在才会玩。本视频主要介绍一下双数组和剪…

【JavaEE】计算机是如何工作的

计算机是如何工作的 冯诺依曼体系操作系统操作系统的概念与定位进程和任务操作系统对进程的管理PCB 的相关信息 冯诺依曼体系 现代的大多数计算机, 都遵循冯诺依曼体系 CPU 中央处理器: 进行算术运算和逻辑判断存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)输入…

竞赛 深度学习乳腺癌分类

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度,召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

竞赛选题 深度学习YOLO抽烟行为检测 - python opencv

文章目录 1 前言1 课题背景2 实现效果3 Yolov5算法3.1 简介3.2 相关技术 4 数据集处理及实验5 部分核心代码6 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习YOLO抽烟行为检测 该项目较为新颖,适合作为竞赛课…

简单测试一下 展锐的 UDX710 性能

最近在接触 联通5G CPE VN007 ,发现使用的是 展锐的Unisoc UDX710 CPU,正好简单的测试一下这颗CPU CPU信息 UDX710 是一颗 双核 ARM Cortex-A55 处理器,主频高达 1.35GHz processor : 0 BogoMIPS : 52.00 Features : fp…

Django中ORM框架的各个操作

我们会好奇,python这么简洁的语言,数据查询是如何做的呢?我将进一步详细和深入地介绍Django中ORM框架的各个方面,包括MySQL的增删改查和复杂查询。让我们分步骤进行。 ORM框架介绍 Django的ORM框架是一个用于与数据库进行交互的工…

Spring Boot项目中使用 TrueLicense 生成和验证License(附源码)

1、Linux 在客户linux上新建layman目录,导入license.sh文件, [rootlocalhost layman]# mkdir -p /laymanlicense.sh文件内容: #!/bin/bash # 1.获取要监控的本地服务器IP地址 IPifconfig | grep inet | grep -vE inet6|127.0.0.1 | awk {p…

【LeetCode】 412. Fizz Buzz

题目链接 文章目录 Python3 【O(n) O(1)】C.emplace_back() 【C 11 之后】 Python3 【O(n) O(1)】 初始版本 class Solution:def fizzBuzz(self, n: int) -> List[str]:ans []for i in range(1, n1):if i % 5 0 and i % 3 0:ans.append("FizzBuzz")elif i % …

07 创建型模式-单例模式

1.单例模式介绍 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,此模式保证 某个类在运行期间,只有一个实例对外提供服务,而这个类被称为单例类。 2.使用单例模式要做的两件事 保证一个类只有一个实例…

【API篇】五、Flink分流合流API

文章目录 1、filter算子实现分流2、分流:使用侧输出流3、合流:union4、合流:connect5、connect案例 分流,很形象的一个词,就像一条大河,遇到岸边有分叉的,而形成了主流和测流。对于数据流也一样…

GitHub-使用 Git工具 创建密钥id_rsa.pub

快速导航 步骤1 打开Git Bash步骤2 输入指令【ssh-keygen】步骤3 打开创建的公钥文件步骤4 复制其中所有内容步骤5 打开GitHub中的Setting界面步骤6 添加SSH keys 步骤1 打开Git Bash 打开Git Bash 工具 步骤2 输入指令【ssh-keygen】 输入指令【ssh-keygen】,并…

【四:httpclient的使用】

目录 1、Demo案例2、请求一个带cookies的get请求3、请求一个带cookies的post请求案例一,案例二的properties的配置 1、Demo案例 public class MyHttpClient {Testpublic void test1() throws IOException {//用来存放我们的结果String result;HttpGet get new Htt…

安装VSCode,提升工作效率!iPad Pro生产力进阶之路

文章目录 前言1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. iPad通过软件远程vscode6.1 创建TCP隧道 7. ipad远…

模型量化笔记--KL散度量化

KL散度量化 前面介绍的非对称量化中,是将数据中的min值和max值直接映射到[-128, 127]。 同样的,前面介绍的对称量化是将数据的最大绝对值 ∣ m a x ∣ |max| ∣max∣直接映射到127。 上面两种直接映射的方法比较粗暴,而TensorRT中的int8量化…