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] );// 数组中默认值 null

        System.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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高价画师的低价服务,会被AI绘画完全取代吗?

花3万块钱买一张画,值吗? 买家花三万块钱买一张网红画师眠狼的画,提前给出了参考图和要求,但最终拿到的作品却货不对板,脸和身体严重割裂,修改一次还要加一千,在互联网上闹得沸沸扬扬。 眠狼是业内著名的画手,又叠加上了网红的buff,参加过多次游戏二创活动,确实有一…

python集合是否可变总结

集合是一个无序的可变的序列。集合中的元素必须是可hash的&#xff0c;即不可变的数据类型。 空集合 aset() 注意a{}创建的是一个空字典。 set —— 可变集合。集合中的元素可以动态的增加或删除。 frozenset —— 不可变集合。集合中的元素不可改变。 注&#xff1a;对于…

C语言第十二弹--扫雷

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 扫雷 1、扫雷游戏分析和设计 1.1、扫雷游戏的功能说明 1.2 游戏的分析和设计 1.2.1、数据结构的分析 1.2.2、文件结构设计 2、扫雷游戏的结构分析 2.1、用…

权威认可 | 全息网御多领域入选《CCSIP 2023中国网络安全行业全景册(第六版)》

2024年1月24日&#xff0c; FreeBuf咨询正式发布《CCSIP&#xff08;China Cyber Security Industry Panorama&#xff09;2023中国网络安全行业全景册&#xff08;第六版&#xff09;》。FreeBuf咨询全景图/全景册系列&#xff0c;以PDR网络安全模型为基础&#xff0c;并参考I…

springboot mongodb简单教程

&#xff08;1&#xff09;依赖 compile(org.springframework.boot:spring-boot-starter-data-mongodb) &#xff08;2&#xff09;application.properties配置文件 spring.data.mongodb.host127.0.0.1 spring.data.mongodb.port27017 spring.data.mongodb.databasetest &a…

开源大规模分布式MQTT消息服务器EMQX部署教程

1.EMQX是什么&#xff1f; EMQX 是一款开源的大规模分布式 MQTT 消息服务器&#xff0c;功能丰富&#xff0c;专为物联网和实时通信应用而设计。EMQX 5.0 单集群支持 MQTT 并发连接数高达 1 亿条&#xff0c;单服务器的传输与处理吞吐量可达每秒百万级 MQTT 消息&#xff0c;并…

openGaussdb5.0单点企业版部署_Centos7_x86

本文档环境&#xff1a;CentOS7.9 x86_64 4G1C40G python2.7.5 交互式初始化环境方式 介绍 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行。openGauss内核深度融合华为在数据库领域多年的经验&#xff0c;结合企业级场景需求&#xff0c;持续…

回归预测 | Matlab实现CPO-LSSVM【24年新算法】冠豪猪优化最小二乘支持向量机多变量回归预测

回归预测 | Matlab实现CPO-LSSVM【24年新算法】冠豪猪优化最小二乘支持向量机多变量回归预测 目录 回归预测 | Matlab实现CPO-LSSVM【24年新算法】冠豪猪优化最小二乘支持向量机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-LSSVM【24年…

写静态页面——魅族导航_前端页面练习

0、效果&#xff1a; 1、html代码&#xff1a;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

springboot+vue3支付宝接口案例-第二节-准备后端数据接口

springbootvue3支付宝接口案例-第二节-准备后端数据接口&#xff01;今天经过2个小时的折腾。准备好了我们这次测试支付宝线上支付接口的后端业务数据接口。下面为大家分享一下&#xff0c;期间发生遇到了一些弯路。 首先&#xff0c;我们本次后端接口使用的持久层框架是JPA。这…

Java基础数据结构之哈希表

概念 顺序结构以及平衡树 中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在 查找一个元素时&#xff0c;必须要经过关键 码的多次比较 。 顺序查找时间复杂度为 O(N) &#xff0c;平衡树中为树的高度&#xff0c;即 O( log2N ) &#xff0c;搜索的效…

【极数系列】Flink环境搭建Linux版本 (03)

文章目录 引言01 Linux部署JDK11版本1.下载Linux版本的JDK112.创建目录3.上传并解压4.配置环境变量5.刷新环境变量6.检查jdk安装是否成功 02 Linux部署Flink1.18.0版本1.下载Flink1.18.0版本包2.上传压缩包到服务器3.修改flink-config.yaml配置4.启动服务5.浏览器访问6.停止服务…

1002. HarmonyOS 开发问题:鸿蒙 OS 技术特性是什么?

1002. HarmonyOS 开发问题&#xff1a;鸿蒙 OS 技术特性是什么? 硬件互助&#xff0c;资源共享 分布式软总线 分布式软总线是多种终端设备的统一基座&#xff0c;为设备之间的互联互通提供了统一的分布式通信能力&#xff0c;能够快速发现并连接设备&#xff0c;高效地分发…

Redis 笔记四

概要&#xff1a; 1.高并发场景秒杀抢购超卖bug实战重现 2.阿里巴巴内部高并发秒杀下单方案首次揭秘 3.基于ReddisMQ实现秒杀下单架构 4.10万订单每秒热点数据架构优化实践 5.秒杀下单MQ如何保证不丢失消息 6.解决MQ下单消息重复消费幂等机制详解 7.线上MQ百万秒杀订单发生积压…

系统架构设计师教程(十九)大数据架构设计理论与实践

大数据架构设计理论与实践 19.1 传统数据处理系统存在的问题19.2 大数据处理系统架构分析19.2.1 大数据处理系统面临挑战19.2.2 大数据处理系统架构特征19.3 Lambda架构19.3.1 Lambda架构对大数据处理系统的理解19.3.2 Lambda架构应用场景19.3.3 Lambda架构介绍19.3.4 Lambda架…

ctfshow web71

开启环境&#xff1a; c?><?php $anew DirectoryIterator("glob:///*"); foreach($a as $f) {echo($f->__toString(). );} exit(0); ?> cinclude("/flagc.txt");exit();

解决方案—幻兽帕鲁Palworld私服部署 一杯茶的功夫搭建部署一个属于自己的游戏私服

《幻兽帕鲁》是Pocketpair开发的一款开放世界生存制作游戏 &#xff0c;游戏于2024年1月18日发行抢先体验版本&#xff0c;游戏中&#xff0c;玩家可以在广阔的世界中收集神奇的生物“帕鲁”&#xff0c;派他们进行战斗、建造、做农活&#xff0c;工业生产&#xff0c;游戏目前…

2024年10大软件开发趋势

随着 2024 年的到来&#xff0c;技术进步和不断变化的市场需求正在推动软件开发领域继续呈指数级增长。对于组织和工程师来说&#xff0c;及时了解这些模式不仅有用&#xff0c;而且是保持残酷和有效的基础。在本文中&#xff0c;我们研究了预计将在 2024 年产生巨大影响的关键…

韶关一高层住宅突发火灾 富维烟火识别防止悲剧发生

近日&#xff0c;韶关市一高层住宅楼突发火灾&#xff0c;幸亏及时得到控制&#xff0c;未造成重大伤亡。这一事件再次提醒我们&#xff0c;高层建筑的火灾安全不容忽视。针对这一问题&#xff0c;北京富维图像公司的FIS智能图像识别系统显得尤为重要。 FIS系统利用已部署的监控…

Java多线程--线程的安全问题与线程的同步机制介绍

文章目录 一、线程安全问题&#xff08;1&#xff09;介绍&#xff08;2&#xff09;同一个资源问题和线程安全问题1、方式一&#xff1a;实现Runnable接口1.1 票数问题1.2 重票和错票问题 2、方式二&#xff1a;继承Thread类 二、安全问题分类总结&#xff08;1&#xff09;局…