day10_oop

今日内容

零、 复习昨日
一、作业
二、继承
三、重写
四、this和super
五、访问修饰符

零、 复习昨日

数组创建的两种方式

  • new int[3];
  • new int[]{值,值2,…}
  • 存值: 数组名[下标] = 值

构造方法什么作用?有参无参构造什么区别?

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

创建对象的过程:

  • new 调用构造方法
  • 先属性初始化,后再执行构造方法内代码

this是什么,什么作用?

  • this指代当前类的对象
  • this.属性; this.方法(); this();
  • this(); 调用自己的无参构造
  • this(参数); 调用自己有参构造

解释重载(Overload)

  • 方法名一样,参数列表不一样
  • 与返回值无关

类封装的步骤

  • 属性私有private,提供set get方法

public class Square{int l;public Square(){this(1);}public Square(int l){this.l = l;}
}

一、作业

3.创建类

创建老师类
创建学生类
老师带了很多学生
把学生存倒数组中 Student[] stus = new Student[3];

// 学生类

package com.qf.homework;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/3/1* @desc*/
public class Student {private int age;private String name;public Student() {}public Student(int age, String name) {this.age = age;this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

// 老师类

package com.qf.homework;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/3/1* @desc 老师类*/
public class Teacher {private int age;private String name;// 在老师类定义属性存储多个学生private Student[] stuArr;public Teacher() {}public Teacher(int age, String name) {this.age = age;this.name = name;}public Teacher(int age, String name, Student[] stuArr) {this.age = age;this.name = name;this.stuArr = stuArr;}public Student[] getStuArr() {return stuArr;}public void setStuArr(Student[] stuArr) {this.stuArr = stuArr;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

// 测试空指针异常

 // 演示空指针public static void test() {// 创建老师Teacher teacher = new Teacher(40,"老王");/*** 这里会报空指针异常,即空对象错误* 是因为stuArr1数组本身 为空,因为老师对象中根本就没有数组*/// Student[] stuArr1 = teacher.getStuArr( );// stuArr1[0].getAge();// 创建数组赋值给老师的数组属性Student[] stuArr = new Student[3];teacher.setStuArr(stuArr);/*** 这里也会报空指针异常,即空对象错误* 这里数组确实存在了,但是数组中存储的是null* 即取出来stuArr2[0]这个null* null.getAge(),所以就报空指针*/Student[] stuArr2 = teacher.getStuArr( );stuArr2[0].getAge();}

image-20240301094923235

// 测试给老师存储学生数组

public static void main(String[] args) {// 创建老师Teacher teacher = new Teacher(40,"老王");// 创建学生Student s1 = new Student(18, "小王");Student s2 = new Student(19, "小李");Student s3 = new Student(20, "小赵");// 创建数组,存学生Student[] stus = new Student[3];stus[0] = s1;stus[1] = s2;stus[2] = s3;// 将数组交给老师teacher.setStuArr(stus);// 从老师中取出学生,查看效果Student[] stuArr = teacher.getStuArr( );for (int i = 0; i < stuArr.length; i++) {String name = stuArr[i].getName( );int age = stuArr[i].getAge( );System.out.println("学生姓名:"+name+",学生年龄"+age );}}

二、继承[重点]

2.1 继承

生活中继承: 子继承父的财产

代码中继承: 子类继承父类,使用父类属性和方法

为什么需要继承:

  • 减少代码重复
  • 是形成多态的前提

语法:

public class Aextends B{}
A类是子类,B类是父类

要求: java中类的继承只能是单继承!!! 类只能继承一个类!!!

// 演示: 父类Animal

package com.qf.oop;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/3/1* @desc 父类Animal*/
public class Animal {int age;String name;void eat(){System.out.println("吃" );}
}

// 狗类Dog

package com.qf.oop;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/3/1* @desc 狗类继承动物类* 狗类是子类* 动物类是父类*/
public class Dog extends Animal{// 继承
}

// 测试

public class TestExtends {public static void main(String[] args) {Dog dog = new Dog( );// Dog类继承Animal类,就可以父类属性和方法dog.name = "大黄";dog.eat();// Cat类继承Animal类,就可以父类属性和方法Cat cat = new Cat( );cat.age = 2;cat.eat();}
}

2.2 继承中属性

子类继承父类,就可以使用父类属性

image-20240301105010774

如果给父类设置私有属性,子类就无法使用父类的属性

image-20240301105216634

假如子类和父类中有重名的属性,子类默认使用自己

  • ps: 一般情况下不会重复定义

image-20240301105522775

2.3 继承中方法

继承中,子类可以使用父类非私有方法

image-20240301105640157

继承中,子类 调用父类私有方法

image-20240301105734266

子类中有与父类一样的方法,默认调用自己的

  • 这就是重写!!! 很重要!!! (多态的前提)
  • 跳转第三章详细了解重写…

image-20240301110043902

2.4 继承中构造方法

在Animal类定义无参构造,里面有输出语句

在Dog类定义无参构造,里面有输出语句

在Test测试类中创建Dog对象,结果

Animal()
Dog()

结论: 创建子类对象时**,先创建父类对象再创建子类对象**

image-20240301145023315

这个结果其实是因为在每个类的每个构造方法内有个**super()**,一般super()默认是隐藏的,

super是指代父类对象,super()是在调用父类无参构造,所以调用子类构造创建对象时先执行了父类构造创建了父类对象

image-20240301145647138

详细的关于this和super的知识,看第四章

三、重写(Override)

重写,也可以叫做覆写,它是发生在继承中,子类重写父类方法,有要求

  • 访问修饰符一致
  • 返回值类型一致
  • 方法名一致
  • 参数列表一致

image-20240301110909236

为什么需要重写?

  • 原因1:父类的方法子类能用但是不好用不适合子类!重写后子类执行自己的方法
  • 原因2:重写也是多态的前提

四、this和super

thissuper
是什么指代当前类对象父类对象
调用属性this.属性 (调用自己/父类属性)super.属性(只能调用父类)
调用方法this.方法(调用自己/父类方法)super.方法(只能调用父类)
构造方法this()/this(参数)只能调用自己构造方法super()/super(参数)调用父类构造方法

注意调用构造方法的语句,必须放在构造方法内,且放在第一行

package com.qf.oop;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/3/1* @desc 狗类继承动物类* 狗类是子类* 动物类是父类*/
public class Dog extends Animal{// int age;String name = "二哈";// 无参构造public Dog(){System.out.println("Dog()" );}/*** 这是注解,告诉编译器此处是重写* 就得重写的规范*/@Overridevoid eat() {System.out.println("狗吃骨头" );}/*** 演示this和super*/public void show() {// 调用自己或父类属性nameSystem.out.println(this.name );// 只能调用父类属性nameSystem.out.println(super.name );this.eat();//调用自己/父类方法super.eat();//调用父类方法}
}

五、练习

pdf6

六、访问修饰符

访问修饰符,访问限定符,访问控制符,其实限制属性/方法能不能被访问到,即能不能被调用

当前类中当前包其他类中其他包子类其他包非子类
public
protected×
缺省(默认)××
private×××

访问修饰符,访问限定符,访问控制符,其实限制属性/方法能不能被访问到,即能不能被调用

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

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

相关文章

【力扣白嫖日记】602.好友申请II:谁有最多的好友

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 602.好友申请II&#xff1a;谁有最多的好友 表&#xff1a;RequestAccepted 列名类型requester_idintaccept…

外卖店优先级

题目描述 ”饱了么”外卖系统中维护着N 家外卖店&#xff0c;编号1~N。每家外卖店都有一个优先级&#xff0c;初始时(0时刻)优先级都为0。 每经过1个时间单位&#xff0c;如果外卖店没有订单&#xff0c;则优先级会减少1&#xff0c;最低减到0;而如果外卖店有订单&#xff0c;则…

【AIGC】微笑的秘密花园:红玫瑰与少女的美好相遇

在这个迷人的画面中&#xff0c;我们目睹了一个迷人的时刻&#xff0c;女子则拥有一头柔顺亮丽的秀发&#xff0c;明亮的眼睛如同星河般璀璨&#xff0c;优雅而灵动&#xff0c;她的微笑如春日暖阳&#xff0c;温暖而又迷人。站在红玫瑰花瓣的惊人洪水中。 在一片湛蓝无云的晴…

Liberod的License申请

Liberod的License申请 找到license申请的路径 查找C盘的磁盘序列号 键盘的win+R,输入cmd 输入vol,然后回车 图中的DiskID就是填写你C盘序列号的位置,填写完成后点击Register,几秒钟后会提示你,预计45分钟后会发送到你的邮箱

docker-mysql:5.7安装

1、下载mysql:5.7镜像 [rootlocalhost ~]# docker search mysql (某个XXX镜像名字) [rootlocalhost ~]# docker pull mysql:5.7 按装之前查看一下是否按装过mysql。如果安装过会占用3306端口。 [rootlocalhost ~]# ps -ef | grep mysql 2、安装 # -d&#xff1a;后台运行 #…

C语言基础(五)——结构体与C++引用

七、结构体与C引用 7.1 结构体的定义、初始化、结构体数组 C 语言提供结构体来管理不同类型的数据组合。通过将不同类型的数据组合成一个整体&#xff0c;方便引用 例如&#xff0c;一名学生有学号、姓 名、性别、年龄、地址等属性&#xff0c;如果针对学生的学号、姓名、年龄…

MJ V7 在 V6 Beta 发布后即将推出,即将到来的人工智能 API 访问!

让我们深入了解 MidJourney 的新功能 在发布官方 Beta 之前总结 V6 Alpha 随着 MidJourney V6 Alpha 上周成为默认版本&#xff0c;该团队现在正在努力在过渡到官方 Beta 版本之前进行进一步的改进&#xff1a; 一组 3 个视觉一致性功能 1 — 升级的“风格参考”功能 这将是…

高中数学:分式函数值域的求法

一、求值域的两种基本思路 1、根据函数图像和定义域求出值域。 难点&#xff1a;画出函数图像 2、研究函数单调性和定义域求出值域。 二、函数图像画法 高中所学的分式函数&#xff0c;基本由反比例函数平移得到。 复杂分式函数图像画法的两个要点&#xff1a; a、找垂直、…

mysql 常用命令练习

管理表格从表中查询数据从多个表查询修改数据sql变量类型 管理表格 创建一个包含三列的新表 CREATE TABLE products (id INT,name VARCHAR(255) NOT NULL,price INT DEFAULT 0,PRIMARY KEY(id) // 自增 ); 从数据库中删除表 DROP TABLE product; 向表中添加新列 ALTER TAB…

如何优化阿里云幻兽帕鲁/Palworld的多人联机性能,并避免内存溢出导致的异常退出游戏?

优化阿里云幻兽帕鲁/Palworld的多人联机性能并避免内存溢出导致的异常退出游戏&#xff0c;可以采取以下几种方法&#xff1a; 选择合适的内存配置&#xff1a;由于幻兽帕鲁是一个对内存需求较高的游戏&#xff0c;建议选择至少16GB的内存。对于不同的玩家数量&#xff0c;可以…

【ArcGIS】渔网分割提取栅格图+网格化分析图绘制

ArcGIS按渔网分割提取栅格图并绘制网格化分析图 准备数据操作步骤步骤1&#xff1a;创建渔网&#xff08;Create Fishnet&#xff09;步骤2&#xff1a;栅格数据处理步骤3&#xff1a;栅格插值步骤4&#xff1a;数据关联 参考 网格化的目的是让各个数据更加标准化的进行统计。因…

自动化测试系列 —— UI自动化测试!

UI 测试是一种测试类型&#xff0c;也称为用户界面测试&#xff0c;通过该测试&#xff0c;我们检查应用程序的界面是否工作正常或是否存在任何妨碍用户行为且不符合书面规格的 BUG。了解用户将如何在用户和网站之间进行交互以执行 UI 测试至关重要&#xff0c;通过执行 UI 测试…

《AI纪元:幻域探险》

游戏项目名称&#xff1a;《AI纪元&#xff1a;幻域探险》 游戏类型&#xff1a;AI驱动的角色扮演探险游戏&#xff08;RPG&#xff09; 背景设定&#xff1a; 《AI纪元&#xff1a;幻域探险》设定在一个名为“幻域”的广阔虚拟世界。这个世界由高度发达的AI技术支持&#xff0…

SpringCloud-同步异步通讯比较

本文详细探讨了同步通讯和异步通讯在信息传递中的区别&#xff0c;以及它们分别带来的优势和不足。通过对支付流程的案例分析&#xff0c;突显了同步通讯可能面临的阻塞和服务依赖问题&#xff0c;而异步通讯通过引入事件驱动模式和消息代理&#xff08;Broker&#xff09;成功…

SQL Server 开发环境配置教程(SSMS+SQL Prompt)

背景 记录一下 SQL Server 常用开发软件 体验了各种数据库IDE(DBeaver、Navicat、DataGrip)之后综合下来还是感觉 SSMSSQL Prompt 对于 SQL Server 最好用&#xff0c;所以在此记录一下配置过程 数据库可视化管理工具SSMS 官方下载地址&#xff1a; https://learn.microsoft…

Java基础数据结构之栈

一.什么是栈 栈是一种特殊的线性表&#xff0c;它只允许在固定的一端进行元素的添加与使用&#xff0c;且遵循先进后出的原则。添加取用元素的一端称为栈顶&#xff0c;另一端称为栈底。出栈和入栈都是操作栈顶元素 二.栈的模拟实现 栈的底层是一个数组 这是里面的成员变量以…

智能汽车加速车规级存储应用DS2431P+TR 汽车级EEPROM 存储器IC

DS2431PT&R是一款1024位1-Wire EEPROM芯片&#xff0c;由四页存储区组成&#xff0c;每页256位。数据先被写入一个8字节暂存器中&#xff0c;经校验后复制到EEPROM存储器。该器件的特点是&#xff0c;四页存储区相互独立&#xff0c;可以单独进行写保护或进入EPROM仿真模式…

ssm172旅行社管理系统的设计与实现

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一 、设计说明 1.1 研究…

day03-Vue-Element

一、Ajax 1 Ajax 介绍 1.1 Ajax 概述 概念&#xff1a;Asynchronous JavaScript And XML&#xff0c;异步 的 JavaScript 和 XML。 作用&#xff1a; 数据交换&#xff1a;通过 Ajax 可以给服务器发送请求&#xff0c;并获取服务器响应的数据。异步交互&#xff1a;可以在 不…

Java教程:SpringBoot项目如何对接Nacos实现服务发现治理,配置管理

–Nacos大家都知道&#xff0c;不懂的可以去官网或者网上查阅一下&#xff0c;本次给大家讲解一下如何在SpringBoot项目中引入Nacos服务来进行服务治理与发现&#xff0c;配置管理等&#xff0c;在微服务当中是必不可少的&#xff0c;各个模块之间可以通过Feign远程调用&#x…