day09_面向对象_构造方法_封装

今日内容

零、 复习昨日
一、构造方法
二、重载
三、封装

零、 复习昨日

1 类和对象是什么关系?

  • 类是模板(原材料)
  • 对象是具体实例(成品)
  • 类创建出对象

2 类中有什么?(类的成员)

  • 成员属性(成员变量), 成员方法

3 创建对象的语法?

  • 类名 对象名 = new 类名();

4 调用对象属性,方法的语法

  • 对象名.属性
  • 对象名.方法()

5 成员变量和局部变量的区别

  • 位置: 成员变量在方法外,局部变量方法内
  • 内存位置: 成员变量堆中对象里面,局部变量在栈中方法内

6 画创建一个对象的内存图

7 类可不可以创建多个对象呢?

  • 可以,对象之间没有关系
  • 每个对象都有属于自己属性方法

8 this是什么?

  • this就是当前类对象

一、构造方法

1.1 无参构造

构造方法又叫构造器,构造函数单词 constructor

  • 构造方法就是用来创建对象的

  • 每个类中都有构造方法,但是默认隐藏的

  • 语法

    public 类名(){
    }
    
    • 构造方法没有返回值,也不需要定义返回值类型,连void也没有
    • 构造方法的方法名只能是当前类类名
    • 只能通过new来调用
  • 构造方法作用

    • 通过调用构造方法,可以在堆中创建对象
    • 属性,方法初始化

// 类定义中可以写出无参构造

public class Student {String name;int age;/*** 构造方法,默认不显示* 构造方法作用* - 通过调用构造方法,可以在堆中创建对象* - 属性,方法初始化*/public Student(){System.out.println("Student()执行了" );}public void study(){System.out.println(name+"在学习" );}
}

// 通过无参构造创建对象

package com.qf.oop;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/2/29* @desc*/
public class TestOOP1 {public static void main(String[] args) {// 创建对象// 类名 对象名 = new 类名();// 类名 对象名 = new 构造方法();Student student = new Student();// student就是通过构造方法创建出的对象,属性就会初始化}
}

无参构造创建出的对象,属性默认值是什么?

  • 对应数据类型的默认值

思考: 通过无参构造创建出的对象属性都是默认值,使用时还需要单独给属性赋值,然后才可以有具体效果! 能不能有一种方式,创建出对象后 属性直接就有值呢?

  • 有!! 通过有参构造创建对象!

1.2 有参构造

有参构造就是给构造方法设计参数,调用构造方法时,传入参数给属性赋值

作用就是: 创建出的对象有指定属性值,而不是默认值

public 类名(数据类型 变量名,...){this.成员属性 = 变量;
}

// 定义有参构造

public class Student {String name;int age;/*** 构造方法,默认不显示* 构造方法作用* - 通过调用构造方法,可以在堆中创建对象* - 属性,方法初始化*/public Student(){System.out.println("Student()执行了" );}// 有参数的构造方法public Student(String name,int age){this.name = name; // 因为成员变量和局部变量重名,用this来调用成员变量this.age = age;System.out.println("Student(String,int)" );}public void study(){System.out.println(name+"在学习" );}}

// 调用有参构造创建对象

public static void main(String[] args) {// 创建对象// 类名 对象名 = new 类名();// 类名 对象名 = new 构造方法();Student student = new Student();student.name = "老王";student.study();System.out.println("-------------" );// 使用有参构造创建对象Student student2 = new Student("老李",38);// 调用时给参数赋值student2.study();// student2对象创建出后,属性就有值}

image-20240229101055210

1.3 总结

语法总结

  • 每个类都默认提供无参构造方法
  • 但是类中只要写出任何一个构造方法,默认不再提供

使用总结

  • 无论无参构造还是有参构造,都是创建对象的
  • 无参构造*创建出的对象的属性是默认值(空值)
  • 有参构造创建出的对象,属性直接就有值
  • 以后建议定义类时候,给出类的有参和无参构造方法

1.4 练习

pdf5

通过构造方法创建对象,

  • 先属性初始化
  • 再执行构造方法内部代码

二、重载

重载是指类中方法的重载(Overload),语法要求

  • 方法名一样,参数列表不一样(类型,个数,顺序任意不一样都行)
    • 重载和返回值没有关系
  • 作用: 就是方便使用,会根据传入的参数自己确定执行哪个方法
    public static void main(String[] args) {/*** println()方法就是重载,源码中有多个重名但是参数不同的方法* 作用: 方便调用* 会根据传入的参数自己确定执行哪个方法*/System.out.println( );System.out.println(1);System.out.println(1.1);System.out.println(true);System.out.println("字符串");System.out.println(new Student(  ) );System.out.println("-----------" );/*** 这几个构造方法,自己定义了重载的构造* 方便调用,无论怎么传参数都可以创建对象*/Student s1 = new Student( );Student s2 = new Student(18);Student s3 = new Student("校长");Student s4 = new Student("小张", 18);}

image-20240229150959987

练习pdf5,T1,T2

三、封装

面向对象编程: 封装,继承,多态

3.1 封装介绍

封装,就是打包,代码中将代码封装起来,比如

  • 方法的封装
  • 类的封装

封装什么作用?

  • 隐藏一些实现的细节
  • 只管使用就行

3.2 类的封装

完整的类的封装步骤

  • 属性私有,设置private修饰符
  • 提供setXxx,getXxx方法

强调: set,get方法是固定写法,一定是set,get后是属性名大写

package com.qf.oop;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/2/29* @desc*/
public class Phone {/*** 封装,需要将属性藏起来* 即私有化,也就是给属性设置私有的修饰符*/private String brand;// 品牌private double price;// 价格public void setBrand(String brand) {this.brand = brand;}public String getBrand() {return brand;}// set方法给属性赋值的public void setPrice(double price){if (price > 0) {this.price = price;} else {System.out.println("设置价格有误!" );}}// get方法是获得属性值public double getPrice(){return price;}public void play(){System.out.println(brand+"手机,价格"+price+"元,在打游戏" );}
}

练习: 定义狗类,属性 int age, String color, String name,要求属性封装,提供有参无参构造

public class Dog{// 属性私有private int age;private String color;private String name;// 构造方法public Dog(){}public Dog(int age,String color,String name){this.age = age;this.color = color;this.name = name;}// setget方法public void setAge(int age){this.age = age;}public int getAge(){return age;}public void setName(String name){this.name = name;}public String getName(){return name;}public void setColor(String color){this.color = color;}public String getColor(){return color;}
}

四、实战

类中定义其他类的属性的写法

定义工人类

image-20240229170750598

定义地址类

image-20240229170808241

要求:

为的Worker 类添加一个属性addr,该属性为 Address 类型。 创建一个Worker 对象,其姓名为"zhangsan",年龄为25,工资为2500,家庭住 址为“北京市海淀区清华园1 号”,邮政编码为100084。

// 工人(Worker)类,其中定义的有地址(Address)类属性

package com.qf.pdf.pdf5t13;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/2/29* @desc* 数据类型*  -基本*  -引用(数组,类,接口)*/
public class Worker {// 属性private String name;private int age;private double salary;// 设置属性 addrprivate Address addr;public Worker() {}public Worker(String name, int age, double salary) {this.name = name;this.age = age;this.salary = salary;}public void setAddr(Address addr){this.addr = addr;}public Address getAddr(){return addr;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}// 普通方法public void work(){System.out.println(name+"在工作" );}public void work(int hours){System.out.println(name+"在工作"+hours+"小时" );}
}

// Address类

package com.qf.pdf.pdf5t13;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/2/29* @desc*/
public class Address {private String address; // 住址private int zipCode;// 邮编public Address() {}public Address(String address, int zipCode) {this.address = address;this.zipCode = zipCode;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public int getZipCode() {return zipCode;}public void setZipCode(int zipCode) {this.zipCode = zipCode;}
}

// 测试

package com.qf.pdf.pdf5t13;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/2/29* @desc*/
public class TestWorker {public static void main(String[] args) {// 创建Worker类对象Worker worker = new Worker( );worker.setName("zhangsan");worker.setAge(25);worker.setSalary(2500);// 创建Address对象Address address = new Address( );address.setAddress("郑州二七区航海路60号");address.setZipCode(4500000);// 给工人类的addr属性赋值,赋值的是Address类对象worker.setAddr(address);// 输出工人的所有信息System.out.println("工人姓名:" + worker.getName() );System.out.println("工人年龄:" + worker.getAge() );System.out.println("工人工资:" + worker.getSalary() );// 这个输出的是Address的对象地址System.out.println("工人地址:" + worker.getAddr() );// worker.getAddr()是获得工人类中的Address对象,// 再通过Address对象调用getAddress()方法获得住址属性System.out.println("工人住址:" + worker.getAddr().getAddress() );System.out.println("住址邮编:" + worker.getAddr().getZipCode() );}
}

// 内存关系

image-20240229171018272

五、总结

构造方法:

  • 创建对象,输出初始化的
  • 无参构造创建对象,属性默认值
  • 有参构造创建对象,属性指定值

重载:

  • 方法名一样,参数不一样
  • 方便调用的

封装:

  • 属性私有private,提供set get方法
  • 固定格式,以后实体类都这么写

重点: 最后那个练习题的写法很重要!!!

idea情况缓存重启

image-20240229094010868

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

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

相关文章

欧拉-黎曼函数的K阶近似(OpenMP实现和MPI实现)

目录 欧拉-黎曼函数的K阶近似&#xff08;OpenMP实现和MPI实现&#xff09;问题描述OpenMP代码实现MPI代码实现 注意事项运行参考资料 欧拉-黎曼函数的K阶近似&#xff08;OpenMP实现和MPI实现&#xff09; 问题描述 OpenMP代码实现 #include <stdio.h> #include <s…

网站开发--Cookie 和 Session 的工作流程

&#x1f495;"Echo"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;网站开发–Cookie 和 Session 的工作流程 一.Cookie和Session的基本概念 前言:HTTP协议是无状态协议 无状态协议就是指HTTP协议在传输的过程中不会保存上一次交互的状态信息,但是…

CrossOver 24下载-CrossOver 24 for Mac下载 v24.0.0中文永久版

CrossOver 24是一款可以让mac用户能够自由运行和游戏windows游戏软件的虚拟机类应用&#xff0c;虽然能够虚拟windows但是却并不是一款虚拟机&#xff0c;也不需要重启系统或者启动虚拟机&#xff0c;类似于一种能够让mac系统直接运行windows软件的插件。它以其出色的跨平台兼容…

Qt应用软件【测试篇】vargrid内存检查工具

文章目录 vargrid介绍vargrid官网vargrid安装常用命令Valgrind的主要命令vargrid介绍 Valgrind是一个用于构建动态分析工具的框架,能自动检测许多内存管理和线程错误,并详细分析程序性能。Valgrind发行版包括七个成熟工具:内存错误检测器、两个线程错误检测器、缓存和分支预…

、JMETER与它的组件们

os进程取样器 这个取样器可以让jmeter直接调用python写的测试数据 这样就可以调用python写的测试数据给到jmeter进行调用 注意&#xff1a;1建议python返回转json格式dumps一下&#xff1b;2py文件中需要把结果打印出来&#xff0c;可以不用函数直接编写 传到jmeter之后可以用…

【前端素材】推荐优质在线电影院商城电商网页Hyper平台模板(附源码)

一、需求分析 1、系统定义 在线电影商城是指一个通过互联网提供电影服务的平台&#xff0c;用户可以在该平台上浏览电影资源、租借或购买电影&#xff0c;以及观看在线影片。 2、功能需求 在线电影商城是指一个通过互联网提供电影服务的平台&#xff0c;用户可以在该平台上…

作业1-224——P1331 海战

思路 深搜的方式&#xff0c;让它只遍历矩形块&#xff0c;然后在下面的遍历中判断是否出现矩形块交叉&#xff0c;但是很难实现&#xff0c;然后发现可以通过在遍历过程中判断是否合法。 参考代码 #include<iostream> #include<cstdio> using namespace std; …

【算法 - 动态规划】划分整数Ⅰ

在前面的动态规划系列文章中&#xff0c;关于如何对递归进行分析的四种基本模型都介绍完了&#xff0c;再来回顾一下&#xff1a; 从左到右模型 &#xff1a;arr[index ...]从index 之前的不用考虑&#xff0c;只考虑后面的该如何选择 。范围尝试模型 &#xff1a;思考 [L ,R]…

【Web】青少年CTF擂台挑战赛 2024 #Round 1 wp

好家伙&#xff0c;比赛结束了还有一道0解web题是吧( 随缘写点wp(简单过头&#xff0c;看个乐就好) 目录 EasyMD5 PHP的后门 PHP的XXE Easy_SQLi 雏形系统 EasyMD5 进来是个文件上传界面 说是只能上传pdf&#xff0c;那就改Content-Type为application/pdf&#xff0c;改…

【学习记录】Resnet

Resnet的残差块 BasicBlock模块&#xff1a; Resnet的作用 解决梯度消失。网络越深&#xff0c;会导致梯度消失。Resnet可以解决梯度消失的问题。 Resnet的原理 参考视频&#xff1a;https://www.bilibili.com/video/BV1cM4y117ob/?spm_id_from333.337.search-card.all.cl…

unity后期

unity|后处理篇 前言一、Post-Processing 1、 Post-Processing的使用2、Post-Processing后处理效果 抗锯齿①、Ambient Occlusion 环境光遮蔽②、Auto Exposure 自动曝光③、Bloom 辉光/泛光④、Chromatic Aberration | 色差⑤、Color Grading 色调/颜色分级⑥、Depth Of Fiel…

css5定位

css 一.定位1.概念&#xff08;定位定位模式边位移&#xff09;2.静态位移static&#xff08;不常用&#xff09;3.相对定位relative&#xff08;不脱标&#xff09;&#xff08;占位置&#xff09;4.绝对定位absolute&#xff08;脱标&#xff09;&#xff08;不占位置&#x…

内网搭建mysql8.0并搭建主从复制详细教程!!!

一、安装mysql 1.1 mysql下载链接&#xff1a; https://downloads.mysql.com/archives/community/ 1.2 解压包并创建相应的数据目录 tar -xvf mysql-8.2.0-linux-glibc2.28-x86_64.tar.xz -C /usr/local cd /usr/local/ mv mysql-8.2.0-linux-glibc2.28-x86_64/ mysql mkdir…

模型选择与评估

&#x1f6a9; 机器学习的一般流程包括&#xff1a;数据集的准备与预处理、搭建模型、模型训练、模型评估与应用。 在现实任务中&#xff0c;我们往往有多种学习算法可供选择&#xff0c;甚至对同一个学习算法&#xff0c;当使用不同的参数配置时&#xff0c;也会产生不同的模型…

IPD MM流程之业务策略工具:安索夫矩阵

IPD市场管理流程&#xff0c;华为内部称为“MM流程”&#xff08;Market Management&#xff0c;MM&#xff09;。华为市场管理是通过对市场和细分市场的分析&#xff0c;制定细分市场的策略&#xff0c;形成商业计划&#xff0c;把商业计划落实在日常工作当中。MM流程其中一个…

bvh文件,人体骨骼重定向

关于两个bvh文件&#xff0c;人体骨骼重定向&#xff0c;小白记录 1、打开 Motionbuilder &#xff0c;选择 打开特定路径下的bvh文件。 绑定骨骼&#xff08;在绑定骨骼过程中&#xff0c;如果骨骼角度&#xff0c;大小之类的不方便&#xff0c;可以shift键加鼠标拖拽界面&…

Fabric V2.5 通用溯源系统——应用后端GIN框架部分设计

本节对Fabric V2.5 通用溯源系统的应用后端部分做一个简单的介绍,包括目录结构、文件作用、用户注册登录与农产品信息上链过程介绍。此节内容免费发布在TrueTechLabs Fabric学习交流QQ群。 购买专栏前请认真阅读:《Fabric项目学习笔记》专栏介绍 TrueTechLabs Fabric学习交流…

仿牛客网项目---显示评论和添加评论功能的实现

这篇文章&#xff0c;我来介绍一下我的项目中的另外一个功能&#xff1a;显示评论和添加评论。 其实这两个功能都不怎么重要&#xff0c;我感觉最重要的应该是用户注册登录功能&#xff0c;这个也了解一下&#xff0c;知道这么一回事儿就好。 首先设计DAO层。 Mapper public …

【一】【算法分析与设计】基础测试

排列式 题目描述 7254是一个不寻常的数&#xff0c;因为它可以表示为7254 39 x 186&#xff0c;这个式子中1~9每个数字正好出现一次 输出所有这样的不同的式子&#xff08;乘数交换被认为是相同的式子&#xff09; 结果小的先输出&#xff1b;结果相同的&#xff0c;较小的乘…

Hgame题解(第二星期)

Hgame题解&#xff08;第二星期&#xff09; Web Select More Courses 打开靶机发现是一个登陆页面&#xff0c;根据题目提示下载弱密码字典&#xff0c;通过BP爆破获得用户密码为qwert123 登陆后进入下一个页面&#xff0c;由于学分已满无法选课&#xff0c;所以需要先进行…