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.hqwc.cn/news/505307.html

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

相关文章

【VTKExamples::PolyData】第四十二期 PointsProjectedHull

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例PointsProjectedHull,并解析接口vtkPointsProjectedHull,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1.…

【论文精读】StableSR

摘要 将Diffusion先验嵌入到合成模型&#xff08;如Stable Diffusion&#xff09;的模式在图像视频编辑领域取得了良好的结果。本文提出StableSR&#xff0c;将Diffusion先验嵌入到超分辨率&#xff08;SR&#xff09;&#xff0c;且不对图像退化模式做明确假设。具体有&#x…

EchoServer回显服务器简单测试

目录 工具介绍 工具使用 测试结果 工具介绍 github的一个开源项目,是一个测压工具 EZLippi/WebBench: Webbench是Radim Kolar在1997年写的一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL&#xff0c;测试网站在压力下工作的…

Oracle dbms_output基本使用2

以前曾使用过Oracle dbms_output&#xff0c;继续熟悉&#xff1b; 执行如下一句&#xff0c;报告错误&#xff0c; 必须放到begin...end里面&#xff1b; 上图也没有把文字输出&#xff0c;因为默认没有开启控制台显示&#xff1b;如下图就输出了文字&#xff0c; put&#x…

高性能通信之Netty

一, 同步IO(BIO)模型的架构 一般针对性能不高的情况下可以使用. 二,异步IO(NIO)模型的架构 多路复用(epoll模型):

Python+PySide6实现一个选择文件并做处理的GUI办公小工具(完整代码)

目录 专栏导读背景安装注意事项完整代码结尾专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——>Python办公自动化专栏求订阅 🕷 此外还…

springBoot整合Redis(二、RedisTemplate操作Redis)

Spring-data-redis是spring大家族的一部分&#xff0c;提供了在srping应用中通过简单的配置访问redis服务&#xff0c;对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装&#xff0c;RedisTemplate提供了redis各种操作、异常处理及序列化&#xff0c;支持发布订阅&…

【 C++ 】空间配置器

1、什么是空间配置器 空间配置器&#xff0c;顾名思义就是为各个容器高效的管理空间(空间的申请与回收)的&#xff0c;在默默地工作。虽然在常规使用STL时&#xff0c;可能用不到它&#xff0c;但站在学习研究的角度&#xff0c;学习它的实现原理对我们有很大的帮助。 2、为什…

vector原理及注意事项

先来看一下本篇文章思维导图&#xff0c;如下&#xff1a; 一. vector的实现原理 1. vector的基类介绍 先看一下class vector的声明&#xff0c;截取头文件stl_vector.h中部分代码&#xff0c;如下&#xff1a; //两个模板参数&#xff0c;第一个是数据类型&#xff0c;第二…

2024最新算法:鳑鲏鱼优化算法(Bitterling Fish Optimization,BFO)求解23个基准函数(提供MATLAB代码)

一、鳑鲏鱼优化算法 鳑鲏鱼优化算法&#xff08;Bitterling Fish Optimization&#xff0c;BFO&#xff09;由Lida Zareian 等人于2024年提出。鳑鲏鱼在交配中&#xff0c;雄性和雌性物种相互接近&#xff0c;然后将精子和卵子释放到水中&#xff0c;但这种方法有一个很大的缺…

DDR5内存相比DDR4内存的优势和区别?选择哪一个服务器内存配置能避免丢包和延迟高?

根据幻兽帕鲁服务器的实际案例分析&#xff0c;选择合适的DDR4与DDR5内存大小以避免丢包和延迟高&#xff0c;需要考虑以下几个方面&#xff1a; 性能与延迟&#xff1a;DDR5内存相比DDR4在传输速率、带宽、工作电压等方面都有显著提升&#xff0c;但同时也伴随着更高的延迟。D…

【C++精简版回顾】14.(重载2)流重载

1.流重载 istream ostream 1.class class MM {friend ostream& operator<<(ostream& out, MM& mm);friend istream& operator>>(istream& in, MM& mm); public:MM() {}MM(int age,string name):age(age),name(name) {} private:int age;st…