day11_oop

今日内容

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

零、 复习昨日

数组创建的两种方式

  • new int[3];
  • new int[]{1,2,3,4};
    手写一个遍历输出数组元素的伪代码

构造方法什么作用?

  • 创建对象,将对象的属性初始化

有参无参构造什么区别?

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

创建对象的过程:

  • 创建对象,开辟空间,属性初始化
  • new调用构造方法开始创建对象,先将属性初始化,再执行构造方法内部代码

this是什么,什么作用?

  • this代表当前类对象,可以调用属性,方法,构造方法

解释重载(Overload)

  • 在同一个类中,方法名一样,参数列表不一样的方法叫做重载
  • 作用就是为了方便使用

一、作业

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

// 学生类

package com.qf.homework;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/1/29* @desc*/
public class Student {int age;String name;String stuNo;// 学号public Student() {}public Student(int age, String name, String stuNo) {this.age = age;this.name = name;this.stuNo = stuNo;}// 用于输出对象的属性信息public void show(){System.out.println("学生姓名:"+name+",学号:"+stuNo+",年龄:"+age );}
}

// 老师类

package com.qf.homework;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/1/29* @desc*/
public class Teacher {String name;String subject;// 学科// 存储多个学生,需要学生数组Student[] studentArr = new Student[3];/*** 数据类型[]*/public void show(){System.out.println("老师姓名:"+name+",老师所教学科:"+subject+":所带学生有:" );for (int i = 0; i < studentArr.length; i++) {// System.out.println(studentArr[i]);// 输出地址studentArr[i].show();}}
}

// 测试类

package com.qf.homework;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/1/29* @desc*/
public class TestOOP {public static void main(String[] args) {Teacher teacher = new Teacher( );System.out.println(teacher );// 老师对象地址System.out.println(teacher.studentArr );//老师对象中数组地址System.out.println(teacher.studentArr[0] );// 数组中默认值 nullSystem.out.println("----------" );teacher.name = "老王";teacher.subject = "java";Student s1 = new Student( );//System.out.println("单独学生对象地址:" + s1 );s1.stuNo = "20240101";s1.name = "张同学";s1.age = 18;teacher.studentArr[0] = s1;//System.out.println("数组中的学生对象地址:" + teacher.studentArr[0] );teacher.studentArr[1] = new Student(19,"李同学","20240102");teacher.studentArr[2] = new Student(20,"赵同学","20240103");teacher.show();// 帮助打印属性信息}
}

// 内存关系

image-20240129095036327

二、封装[重点]

java面向对象编程有三大特点: 封装,继承,多态(抽象,接口)

2.1 封装

生活的封装: 买东西发的快递,电脑

封装有什么用? 将东西(代码)隔离;方便使用


封装在java中随处可见

  • 方法的封装
  • 类的封装
  • java的框架就是封装好的工具

2.2 类的封装

类的封装,两步骤

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

注意:

  • set方法有参数无返回值
  • get方法无参数有返回值
  • 且命名固定: 一定是setXxx,getXxx,xxx是属性首字母大写
  • 封装过后,属性只能通过setget方法访问,即无法再直接通过对象调用属性

2.3 练习

创建电脑类(computer),将属性封装,然后创建测试类创建对象,给属性赋值,并取值

package com.qf.pack;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/1/29* @desc*/
public class Computer {private String brand;private double price;public void setPrice(double price) {this.price = price;}public double getPrice(){return price;}public void setBrand(String brand) {this.brand = brand;}public St n brand;}
}
class TestComputer {public static void main(String[] args) {Computer computer = new Computer( );// 属性赋值computer.setBrand("华为");computer.setPrice(4999);// 属性取值String brand = computer.getBrand( );double price = computer.getPrice( );System.out.println(brand );System.out.println(price );}
}

三、继承extends[重点]

3.1 何为继承?

生活中继承: 子承父业, 父辈的资产子辈可以使用 (子可以使用父的东西)

代码中继承: 子类继承父类,子类就使用父类的东西

3.2 为什么需要继承?

编程中继承好处:

  • 减少代码重复,可以将重复代码抽取到父类中,让你子类重复使用
  • 是多态前提,为多态做准备

3.3 如何继承?

class A extends B{}

称为: A类为子类,B类为父类, A类继承B类


继承后,A类对象就可以使用B类中的属性和方法

// 父类-Animal

public class Animal {int age;String color;void eat(){System.out.println("吃" );}}

// 狗类-Dog

public class Dog extends Animal{}

// 测试

public class TestExtends {public static void main(String[] args) {Dog dog = new Dog( );dog.color = "黄色"; // color是使用的父类属性dog.age = 2;  // age是使用的父类属性System.out.println(dog.age + ","+dog.color );}
}

3.4 继承的特点

继承中的特点,或者说是继承中需要注意的地方

3.4.1 单继承

单继承,一个类只能继承另外一个类,即一个类只能有一个父类.

image-20240129112452827

3.4.2 属性

父类私有的属性子类无法使用!

image-20240129112835974

如果子类和父类中有同名属性,子类用自己的属性

image-20240129113153428

3.4.3 方法

父类的私有化(private)方法,子类无法使用

image-20240129113424353

如果子类中也定义了与父类一样的方法,子类默认使用自己的方法。这种方式就是重写!

----后续还会再详细讲重写!!!

image-20240129114040048

3.4.4 构造方法

在使用new调用子类构造方法,创建子类对象时,会默认先调用父类的构造方法创建父类对象,并对父类属性初始化,然后才创建子类对象

  • 如何调用父类构造方法呢? 子类构造方法中,第一行隐藏了super()在调用父类构造
  • 创建子类对象为什么要调用父类构造呢? 因为调用父类构造,就会创建父类对象,父类属性+方法就会初始化,子类就可以使用父类的属性和方法

image-20240129144949292

对象创建的过程:

  • 有父类先创建父类对象
  • 先属性 后构造

pdf6_t9

四、重写

重写? Override,又叫覆盖,覆写

  • 发生在继承中,子类重写父类的方法
  • 重写时,子类方法有要求:
    • 访问修饰符要与父类一致
      • 其实可以不一致: 子类重写后,访问修饰符权限 >= 父类即可
    • 返回值类型要与父类一致
      • TODO: 其实也可以不一致: 多态来解释
    • 方法名要与父类一致
    • 参数列表要与父类一致
    • 方法体没要求,一般内容不一样
    • 特殊的: 子类 不能重写父类私有方法

为什么需要重写?

  • 因为父类的方法不适用于自己(父类方法不好用)
  • 也是多态的前提

image-20240129153856569

练习题

pdf6_t11_t12

五、this和super

thissuper
代表当前类的对象当前类父类对象
调用属性this.属性;调用子类(父类)属性super.属性;调用的是父类属性
调用方法this.方法();调用子类(父类)方法super.方法();调用父类的方法
构造方法this();this(参数) 调用自己类中的构造方法super();调用父类无参构造
super(参数);调用父类有参构造

this()和super()这些调用构造方法的句子只能在构造方法中使用


super();很特殊, 在每个构造方法默认第一行都有一个super();

super(参数); 可以调用父类的有参构造(前提父类得定义有参构造),将数据传递给父类

pdf6_t1_t2

六、访问修饰符

访问修饰符:

  • 位置: 修饰属性和方法的,放在属性和方法前
  • 作用: 访问修饰又叫做访问控制,或者访问权限,即可以控制能不能用这个属性或者方法
  • 哪些修饰符?
    • public , protected , 缺省(默认|不写),private
当前类同包不同类不同包子类中不同包非子类
public
protected√子类能调用×
缺省(默认,包级别)××
private×××

总结: 访问权限范围 public > protected > package > private

经验:

  • 因为学过封装,后续再写代码,属性一般使用private私有化
  • 方法一般都是public

七、总结

封装

  • 属性私有
  • setget方法
  • 后续:一键生成

重点: 继承

  • 掌握如何编写继承的代码? 什么时候需要继承?
  • 继承中关于属性,方法,构造
    • 子类只能使用父类非私有的属性和方法
    • 方法有重写. 什么是重写?有什么要求?为什么需要重写?
    • 在创建子类对象时,父类构造会怎么样?为什么?super()默认在哪?
    • this和super特点

作业:

  • 看笔记,笔记中涉及的知识点敲出来(演示出来),不要照抄代码
  • 能解释上面这些点即可
  • 写pdfT19,T24

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

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

相关文章

【IEEE会议征稿通知】2024年算法、软件工程与网络安全国际学术会议(ASENS 2024)

2024年算法、软件工程与网络安全国际学术会议&#xff08;ASENS 2024&#xff09; The International Conference on Algorithms, Software Engineering and Network Security 2024年算法、软件工程与网络安全国际学术会议&#xff08;ASENS 2024&#xff09;将于2024年3月29…

error: failed to open index: Database already open. Cannot acquire lock报错解决办法

ordinals节点数据同步出现报错 error: failed to open index: Database already open. Cannot acquire lock.问题分析&#xff1a; 出现问题的原因是btcoin core节点数据没有同步完我们就开始进行ordinals数据同步&#xff0c;导致/root/.local/share/ord/index.redb 文件数据…

深度强化学习(王树森)笔记03

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…

在Visual Studio 2022中将源文件扩展名改为 .c 后,没有显示 #define _CRT_SECURE_NO_WARNINGS 1?

一、问题 在Visual Studio 2022中将源文件扩展名改为 .c 后&#xff0c;没有显示 #define _CRT_SECURE_NO_WARNINGS 1&#xff1f; 二、解答 对于使用了不安全的C运行时库函数&#xff08;如strcpy、scanf等&#xff09;而触发的安全警告&#xff0c;编译器不会默认包含_CRT_S…

ubuntu中的rsyslog

目录 1. rsyslog简介 2. 查看/var/log 3. syslog的配置文件 3.1 /etc/rsyslog.d/50-default.conf 3.2 /etc/rsyslog.conf 4. 如何写入syslog 4.1 C语言 4.2 shell 4.3 内核输出 5. syslog.1和syslog.2.gz等文件是如何生成 6. logrotate是如何被执行 7. 如何限制sys…

OJ_糖果分享游戏

题干 c实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> using namespace std;void ShareCandy(vector<int>& student) {int size student.size();vector<int> share(size); //保存每个同学交换前&#xff0c;糖果数量…

HTTPS 之fiddler抓包--jmeter请求

一、浅谈HTTPS 我们都知道HTTP并非是安全传输&#xff0c;在HTTPS基础上使用SSL协议进行加密构成的HTTPS协议是相对安全的。目前越来越多的企业选择使用HTTPS协议与用户进行通信&#xff0c;如百度、谷歌等。HTTPS在传输数据之前需要客户端&#xff08;浏览器&#xff09;与服…

在centos 7 中安装配置Jdk、Tomcat、及Tomcat自启动

目录 一、安装配置Jdk 1.创建目录并上传文件 2.解压JDK压缩包 3.配置JDK环境变量 4.设置环境变量生效 二、安装配置Tomcat 1.上传Tomcat并解压 2.启停Tomcat 3.修改tomcat-user.xml配置 4.配置远程访问Tomcat 5.远程项目发布 三.Tomcat自启动配置 1.配置Tomcat自启…

腾讯多模态大模型最新综述,从26个主流大模型看多模态效果提升关键方法

在大规模语言模型&#xff08;LLMs&#xff09;通往通用人工智能&#xff08;AGI&#xff09;的道路中&#xff0c;从传统的单一的“语言模态”扩展到“图像”、“语音”等等的“多模态”必然是大模型进化的必经之路。 在过去的 2023 年&#xff0c;多模态大规模语言模型&…

C# 图片或PDF保存到SQL Server数据库

C# 图片或PDF保存到SQL Server数据库 数据库字段如下&#xff1a;图片保存要用image数据类型 保存到数据库的两种方式&#xff1a; // 打开文件&#xff0c;获取图片路径OpenFileDialog openFileDialog new OpenFileDialog();if (openFileDialog.ShowDialog() DialogResult.…

红外热成像仪定制_热成像仪/红外夜视仪开发方案

红外热成像技术是一种利用红外热成像仪将物体发出的不可见红外辐射能量转换成可见的温度场图像的技术&#xff0c;通过不同颜色来表示不同温度。这项技术的应用领域非常广泛&#xff0c;从电路维修到暖通检测再到汽车故障排查等各个领域都有着重要的作用。 红外热成像仪的解决方…

C++ —— 智能指针

C —— 智能指针 文章目录 C —— 智能指针一、为什么需要使用智能指针&#xff1f;二、内存泄漏什么是内存泄漏&#xff1f;内存泄漏的危害&#xff1f;内存泄漏分类 三、智能指针的使用及原理1. RAII2. 智能指针的原理 三、智能指针的缺陷及其发展3.1 std::auto_ptr3.2 std::…