学习面向对象

面向对象

概念

现实生活:

类:抽象的概念,把具有相同特征和操作的事物归为一类

先有实体,再有类的概念

代码世界:

类:抽象的概念,把具有相同属性和方法的对象归为一类

编写顺序:先有类,再创建对象

类的作用:类相当于一个模板,刻画出具有相同属性和方法的对象

  1. 类中只有属性和方法

  2. 属性也叫做全局变量,属性分为成员变量和静态变量

  3. 方法分为成员方法和静态方法

public class 类名{//属性也叫做全局变量,分为成员变量和静态变量//成员变量数据类型 变量名;//静态变量static 数据类型 变量名;//方法分为成员方法和静态方法//成员方法访问修饰符 返回值类型 方法名([参数]){}//静态方法访问修饰符 static 返回值类型 方法名([参数]){}
}

对象

创建对象的语法:类名 对象名 = new 类名();

new 构造方法; 属于对象,就在堆内存中开辟空间

类名 对象名 :对象名属于引用,存的是对象在堆内存中的地址

操作对象:

  1. 设置成员属性

  2. 获取成员属性

  3. 调用成员方法

成员属性/成员变量

语法结构:数据类型 变量名;

编写的位置:类里,方法的外面

成员变量 vs 局部变量

成员变量:类里,方法的外面的变量,并且系统会赋默认值,作用在整个类中

局部变量:方法内的变量,系统不会赋默认值,作用在方法中

成员方法

语法结构:访问修饰符 返回值类型 方法名([参数]){}

编写的位置:类里

成员方法 vs 静态方法

成员方法:属于对象的方法,必须使用对象调用

静态方法:属于类的方法,使用类名调用

构造方法

含义:和new一起是创建对象的功能

特点:

  1. 与类名相同的方法

  2. 没有返回项

注意:

1. 当类中没有写构造方法时,系统会默认添加无参构造(无参数的构造方法)
  1. 构造方法可以重载的

有参构造好处:创建对象时,把数据赋值给该对象

public class Person{//注意:这种不是构造方法,是成员方法public void Person(){}
}

private - 私有化

含义:私有化

作用:

1. 修饰属性:私有化属性,不能让外界使用

  1. 修饰方法:私有化方法,不能让外界使用

应用场景:不想让外界访问的属性和方法就用private修饰

封装

步骤:

  1. 私有化属性

  2. 添加get(获取)/set(设置)方法

好处:外界不可以直接操作属性,必须通过get、set方法操作,可以在get、set方法中做额外的功能

this - 本对象

含义:代表本对象,this出现方法里,表示调用该方法的对象

作用:

  1. this.属性:调用本对象的成员变量

  2. this.方法:调用本对象的成员方法

  3. this():调用本对象的构造方法(在一个构造方法中的第一句调用另外一个构造方法)

分包

基本作用:防止了类的重名问题

项目作用:项目中有众多的类,把相同功能的类放在同一个包中,方便管理

工具类:com.dream.util/tool

实体类:com.dream.vo/bean/entity/bto/pojo

数据库类:com.dream.dao/mapper

static - 静态的

作用:

  1. 修饰属性

类加载到方法区时,JVM会扫描该类的所有属性 ​ 并把静态属性加载到静态区中,静态属性属于类属性, ​ 该类所有的对象都共享该属性 ​ 静态属性直到项目结束时才会被回收

注意:静态属性使用类名调用

  1. 修饰方法

属于类方法,直接用类名调用

应用场景:工具类

  1. 静态代码块

静态代码块是类加载到方法区时才会被调用,该代码块只能初始化静态变量

代码块是创建对象时优先于构造方法调用,该代码块可以初始化成员变量和静态变量

构造方法是创建对象时调用,该方法可以初始化成员变量和静态变量

成员变量 vs 静态变量

成员变量:属于对象的变量,每个对象独享一份

静态变量:属于类的变量,每个对象都共享一份

继承

使用场景:多个类似的类,有相同的属性和方法,就可以把相同属性和方法抽取到父类

好处:减少了代码的冗余

深入继承:

创建子类对象,会不会调用父类构造方法? 会 创建子类对象,会不会创建父类对象? 不会 创建子类对象,为什么会调用父类构造方法? 目的是将父类的属性存放在子类对象中

创建子类对象,先调用父类构造方法还是子类构造方法? 先调用子类构造方法

创建子类对象,先完成父类构造方法还是子类构造方法? 先完成父类构造方法

子类可以继承父类私有化的属性和方法吗?

可以,但是只能间接调用

super - 父类

含义:代表父类

作用 在子类中:

  1. super.属性:调用父类非私有化的成员变量

    1. super.方法:调用父类非私有化的成员方法

    2. super():调用父类非私有化的构造方法

重写

含义:重写也叫做复写,将父类中方法在子类中重新编写一遍

应用场景:父类方法不满足子类需求时,子类就可以重复父类的方法

条件:

  1. 在子类中重写父类的方法

  2. 返回值、方法名和参数列表必须和父类重写的方法一致

  3. 访问修饰符不能比父类重写的方法更严格

访问修饰符

含义:修饰类、方法、属性,定义使用的范围

学习:做实验

访问修饰符本类本包其他包子类其他包
privateOK
默认的OKOK
protectedOKOKOK
publicOkOKOKOk

Object

含义:基类也叫做超类,Object是所有类的祖先类

注意:如果一个类没有明确继承的父类,默认继承Object

equals:比较两个对象内存地址是否相同

hashCode:获取对象的hash值

getClass:获取类的字节码文件对象

toString:获取对象的字符串表示

标杆作用:Object作为所有类的父类,定义了几个方法,方便子类去重写

equals的标杆作用:比较两个对象是否相同,不同的对象比较规则不一样,所以子类重写即可

toString的标杆作用:每个子类都有不同的属性,重写toString直接打印该对象中所有的属性,方便观察数据

final

含义:最终

作用:

  1. 修饰类:该类不能被继承

  2. 修饰方法:该方法不能被重写

  3. 修饰变量:变成常量,不能重新赋值

​ 常量的命名规则:全大写,单词之间用下划线隔开

​ 常量的生命周期:存在常量池中,直到项目结束才会被销毁

抽象类及抽象方法

//抽象类
public abstract class 类名{//抽象方法public abstract void method();
}

抽象方法交给非抽象的子类去实现(重写)

应用场景:当一个方法必须在父类中出现,但是这个方法又不好实现,就把该方法变成抽象方法,交给非抽象的子类去实现

面试题: 1.抽象类不能有构造方法?

抽象类可以有构造方法

2.抽象类中只能有抽象方法?

抽象类中有非抽象方法(成员方法和静态方法)

3.抽象类中不可以没有抽象方法?

抽象类中可以没有抽象方法,但是毫无意义

4.如果父类是抽象类,则子类必须实现父类的抽象方法?

不一定,子类如果是抽象类,可以不实现父类的抽象方法

5.可以使用new关键字来创建抽象类对象?

不可以,创建的是匿名内部类的对象

接口

含义:特殊的抽象类

注意:

  1. JDK1.7时,接口中只能有静态常量和抽象方法

  2. JDK1.8开始,接口中添加了静态方法和默认方法

应用场景:接口更像一个规范

抽象类 vs 接口

抽象类:成员变量、静态变量、静态常量、成员方法、静态方法

接口:静态常量、静态方法(JDK1.8)、默认方法(JDK1.8)

面试题:

1.一个类可以实现多个接口?可以 2.一个接口可以实现多个接口?不可以,接口与接口的关系是多继承 3.接口里面的方法不一定都是抽象的?JDK1.7时接口里只能有抽象方法,JDK1.8时接口可以有抽象方法和默认方法 4.接口解决了类的单继承问题?是的,因为类与类是单继承,类与接口是多实现 5.一个类是否可以继承一个类并同时实现多个接口?可以 6.接口可以new对象?接口是特殊的抽象类,但是本质还是抽象类,抽象类是不可以new对象的,接口也是不能new对象,new出来的匿名类内部类的对象

类 - 接口的关系: 类 - 类:单继承 类 - 接口:多实现 接口 - 接口:多继承

多态

理解:多种形态

分类:

类的多态:子类对象指向父类引用(父类引用中存储的是子类对象在堆中开辟的地址)

接口的多态:实现类对象指向接口的引用(接口的引用中存储的是实现类对象在堆中开辟的地址)

设计原则:前人总结的经验,告诉我们什么不该做

设计模式:前人总结的经验,告诉我们一步一步的怎么做

OCP原则:

O - Open - 在需求升级时,对于创建类是欢迎的

(因为创建类对于原来代码的影响几乎为0)

C - Close - 在需求升级时,对于改动原有类是拒绝的

(因为原有类之间的关系是趋于稳定状态,如果改动原有类,

很有可能打破这种平衡,导致bug的出现)

P - Principle - 原则

优缺点:

优点:提高程序的维护性,在需求升级/迭代时,不违反OCP原则

缺点:不能调用子类独有的属性和方法

对象转型

自动转型 - 向上转型:子类类型 转 父类类型

注意:

1. 向上转型就是多态!!!
  1. 向上转型后,可以调用父类属性

  2. 向上转型后,可以调用父类方法

  3. 向上转型后,不可以调用子类独有的属性

  4. 向上转型后,不可以调用子类独有的方法

  5. 向上转型后,可以调用子类重写父类的方法

强制转型 - 向下转型:父类类型 转 子类类型

内部类

理解:一个类中再声明另外一个类

分类:

1. 成员内部类
  1. 静态内部类

  2. 接口内部类

  3. 局部内部类

  4. 匿名内部类

应用场景:

  1. B类的对象只在A类中使用,并且B类对象使用到了A类所有的属性,就可以将B类作为A类的成员内部类

  2. B类的对象只在A类中使用,并且B类对象使用到了A类静态的属性,就可以将B类作为A类的静态内部类

  3. 抽象类的子类只创建一次对象,就没必要创建子类,直接使用匿名内部类(new 抽象类)

  4. 接口的实现类只创建一次对象,就没必要创建实现类,直接使用匿名内部类(new 接口)

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

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

相关文章

神经网络系列---池化

文章目录 池化最大池化平均池化 池化 最大池化 最大池化(Max Pooling)是卷积神经网络中常用的一种池化技术。其操作是:在输入特征图的一个局部窗口内选取最大的值作为该窗口的输出。 数学表达式如下: 考虑一个输入特征图 A A…

[C++][linux]Linux上内存共享内存用法

一,什么是共享内存 共享内存(Shared Memory),指两个或多个进程共享一个给定的存储区。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函…

【ELK05】es的java-api操作-Java High Level REST Client常用功能

1.客户端概括 1.1支持多种客户端 ES支持多种语言客户都安,包括ruby js python java go .net等,其中java目前最新版本的客户都安支持2种方式。一种是旧版已经过时的transport client ,一种是java high level rest client,前者是通过tcp协议链接访问es,后者就是java代码实…

系统学习Python——装饰器:类装饰器-[装饰器与管理器函数]

分类目录:《系统学习Python》总目录 抛开这些细节微妙性,Tracer类装饰器示例最终仍然是依赖于__getattr__来拦截对包装的和内嵌实例对象的获取。正如我们在前面见到的,我们真正需要完成的只是把实例创建调用移入一个类的内部,而不…

GEE入门篇|遥感专业术语(实践操作4):光谱分辨率(Spectral Resolution)

目录 光谱分辨率(Spectral Resolution) 1.MODIS 2.EO-1 光谱分辨率(Spectral Resolution) 光谱分辨率是指传感器进行测量的光谱带的数量和宽度。 您可以将光谱带的宽度视为每个波段的波长间隔,在多个波段测量辐射亮…

RestTemplate启动问题解决

⭐ 作者简介:码上言 ⭐ 代表教程:Spring Boot vue-element 开发个人博客项目实战教程 ⭐专栏内容:个人博客系统 ⭐我的文档网站:http://xyhwh-nav.cn/ RestTemplate启动问题解决 问题:在SpringCloud架构项目中配…

服务器双线什么意思?有什么使用优势?

对于企业而言服务器至关重要,它几乎链接着企业的业务,也是员工业务沟通的桥梁,为了保持服务器稳定持续的工作,很多企业都很关心服务器双线的问题,相对来说现在大部分企业使用的都是服务器双线,那服务器双线…

Java SpringBoot 整合 MyBatis 小案例

Java SpringBoot 整合 MyBatis 小案例 基础配置&#xff08;注意版本号&#xff0c;容易报错&#xff09; pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http…

TikTok东南亚小店爆单思路,怎么玩?

东南亚地区的跨境电商市场已经成为全球范围内最具吸引力的市场之一&#xff0c;在各个跨境电商平台上&#xff0c;都是转化率最高的站点之一。TikTok作为电商黑马&#xff0c;吸引了一大波跨境电商玩家入驻&#xff0c;其中东南亚小店也成为热门的选择&#xff0c;那么东南亚小…

当Vue项目启动后,通过IP地址方式在相同网络段的其他电脑上无法访问前端页面?

当Vue项目启动后&#xff0c;通过IP地址方式在相同网络段的其他电脑上无法访问前端页面&#xff0c;可能是由以下几个原因造成的&#xff1a; 服务监听地址&#xff1a;默认情况下&#xff0c;许多开发服务器&#xff08;如Vue CLI的vue-cli-service serve&#xff09;只监听lo…

ubuntu22.04安装cuda11.5+cudnn8.8.0

因为pytorch1.11.0与cuda版本的关系 需要用到cuda11.5 否则报错 "addmm_sparse_cuda" not implemented for Half cuda11.5.0及以前的版本不会出现这个问题 因此重新安装&#xff0c;步骤如下&#xff1a; 安装CUDA-11.5.0 wget https://developer.download.nvi…

2023年09月CCF-GESP编程能力等级认证C++编程六级真题解析

本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录・点这里 一、单选题(共15题,共30分) 第1题 近年来,线上授课变得普遍,很多有助于改善教学效果的设备也逐渐流行,其中包括比较常用的手写板,那么它属于哪类设备?( ) A:输入 B:输出 C:控制 D:记录 答…

ky10-server docker 离线安装包、离线安装

离线安装脚本 # ---------------离线安装docker------------------- rpm -Uvh --force --nodeps *.rpm# 修改docker拉取源为国内 rm -rf /etc/docker mkdir -p /etc/docker touch /etc/docker/daemon.json cat >/etc/docker/daemon.json<<EOF{"registry-mirro…

kubectl 命令行管理K8S(上)

目录 陈述式资源管理方式 介绍 命令 项目的生命周期 创建 kubectl create命令 发布 kubectl expose命令 更新 kubectl set 回滚 kubectl rollout 删除 kubectl delete 应用发布策略 金丝雀发布 陈述式资源管理方式 介绍 1.kubernetes 集群管理集群资源…

深圳市萨科微半导体有限公司一直研究新材料新工艺

深圳市萨科微&#xff08;www.slkoric.com&#xff09;半导体有限公司一直研究新材料新工艺&#xff0c;不断推出新产品&#xff0c;驱动公司不断发展。最近萨科微slkor推出SL40T120FL系列IGBT单管&#xff0c;和CMOS运算放大器SLA333等产品&#xff0c;为新能源汽车、太阳能光…

【lv14 day10内核模块参数传递和依赖】

一、模块传参 module_param(name,type,perm);//将指定的全局变量设置成模块参数 /* name:全局变量名 type&#xff1a; 使用符号 实际类型 传参方式 bool bool insmod xxx.ko 变量名0 或 1 invbool bool insmod xxx.ko 变量名0 或 1 charp char * insmod xxx.ko 变量名“字符串…

全中文+图形化:国产编程语言来了!

编程语言的选择困扰着我们&#xff0c;静态还是动态&#xff1f;编译型还是解释型&#xff1f;但这个困扰正在被图形化编程语言&#xff0c;如iVX&#xff0c;一扫而空。 图形化编程语言&#xff0c;被许多人误解为孩子的玩具&#xff0c;无法处理复杂任务。但是&#xff0c;你…

基于Java学生管理系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

1904_ARM Cortex M系列芯片特性小结

1904_ARM Cortex M系列芯片特性小结 全部学习汇总&#xff1a; g_arm_cores: ARM内核的学习笔记 (gitee.com) ARM Cortex M系列的MCU用过好几款了&#xff0c;也涉及到了不同的内核。不过&#xff0c;关于这些内核的基本的特性还是有些不了解。从ARM的官方网站上找来了一个对比…

【UE 材质】冰冻效果

效果 步骤 1. 打开“Quixel Bridge” 下载冰的纹理 2. 新建一个材质&#xff0c;这里命名为“M_Frozen” 打开“M_Frozen”&#xff0c;添加如下节点&#xff0c;此时我们可以通过控制参数“偏移”来改变边界的偏移 此时预览效果如下 如果增加参数“偏移”的默认值效果如下 3.…