Java面向对象的特性:封装,继承与多态

news2024/9/22 7:20:41

Java面向对象的特性

在学习Java的过程是必须要知道的Java三大特性:封装、继承、多态。如果要分为四类的话,加上抽象特性。

封装

1.封装概述
是面向对像三大特征之一(封装,继承,多态)
是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对像内部的,外界是无法直接操作
2.封装原则
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问成员变量private,提供对应的getXxx()/setXxx()方法
3.封装好处
通过方法来控制成员变星的操作,提高了代码的安全性
把代码用方法进行封装,提高了代码的复用性

//封装类
public class 类名(){
	修饰符 类名 (参数){
		
	}
}

//Main方法
public class Demo {
    public static void main(String[] args) {
		类名 变量名 = new 类名();
	|

封装主要是通过Main方法new个对象从而调用封装起来的方法,默认封装内的方法主体是由一个无参构造,如果写了有参构造会忽略无参构造,建议每次添加无参构造。

构造方法注意事项

1、构造方法创建:
如果没有定义构造方法,系统会默认给出一个无参构造方法
如果定义了构造方法,系统将不提供无参构造方法
2、构造方法重载
如果自定义了带参构造方法,还有使用无参构造方法,需要再写一个无参构造方法
3、推荐使用
无参构造每次必写

this与super

为什么要把this与super放在这里介绍,因为从面向对象开始,通过私有化变量的调用就会发生变化,而对于本类中,如果出现同名变量的情况,添加this与super与不添加有极大的差别。如下

在这里插入图片描述

不同颜色框起来的代表所指向的是一样的,红色代表本内私有变量,如果在重名情况下想调用需要添加关键字this,代表向本内上一层去寻找;蓝色表示传入参数。
翻译:将传入的name赋值到本类中的name变量。

setXXX()与getXXX()方法

借着封装再说一下这setXXX()与getXXX()方法,首先对于私有变量是没办法直接在其它类中调用的,需要通过这两个方法进行写入与获取

成员变量与局部变量区别

在这里插入图片描述

继承

含义:多个类中存在共同属性,则可以抽取出来形成父类,让多个类去调用父类的变量与方法。
好处:提高代码的复用性

注意事项:

  1. Java中只支持单继承不支持多继承;
  2. 一个类可以被多个类继承;
  3. 多层继承,一个类的父亲可以再去继承另一个父类
  4. 成员变量继承只能继承非私有化;

方法重写

概述:
子类中出现了和父类一样的方法声明
_
方法重写的应用:
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,既沿袭了父类功能,又定义了子类特有的内容。
_
@Override
是一个注解
,可以帮助我们检查重写方法的方法声明的正确性

方法重写注意事项
1、私有方法不能被重写(父类私有成员子类是不能继承的)
2、子类方法访问权限不能更低(public>默认>私有)
父类:
在这里插入图片描述
子类
在这里插入图片描述
private子类访问public父类被拒。
父类默认,子类是public可以访问。

Java中继承的注意事项

Java中类只能单继承不支持多继承
Java中类支持多层继承

修饰符

权限修饰符

在这里插入图片描述

权限修饰符单独来讲比较枯燥,可以换个思路——你的钱与家庭
首先private可比作自己,钱只能自己花,别人花不到!
_
但是private就不一样,以比作家庭,你的钱除了自己,还能给家里媳妇跟孩子花,家里的成员可以花,但是不会给别人花,别人也花不到!
_
protected解释是不同包的子类,相当于是在外面的私生子,这个私生子有时候也得给点钱花花,但是无关的人还是花不到
_
最后是公共类,所有人都可以用。

final修饰局部变量

就是限定:要是变量基本类型,修饰的数据值不能发生改变;要是变量引用类型,对应地址值不能发生改变。但是地址里面的内容可以变化

static静态

可以修饰成员方法与成员变量

static修饰的特点

被类的所有对象共享
这也是我们判断是否使用静态关键字的条件
可以通过类名调用
当前也可以通过对象名调用【推荐使用类名调用】

在这里插入图片描述
在这里插入图片描述

static访问特点

因为static在编译过程就已经初始化好存在方法区,所以最先出来对应特点:
非静态成员对于成员变量与成员方法不论静态还是非静态都可以访问;
静态成员、方法只能访问静态成员、方法

静态成员内存图

在这里插入图片描述

多态

同一对象在不同时刻表现出来的不同形态

前提与体现

1、有继承/实现类关系
2、有方法重写
3、有父类引用指向子类对象

如下图:
1、继承类关系
在这里插入图片描述
2、方法重写
父类:
在这里插入图片描述
子类:
在这里插入图片描述
3、父类引用指向子类
在这里插入图片描述

多态的访问特点

其实就是访问父类,或者重写内容,访问成员变量是父类,方法是子类。

在这里插入图片描述
在这里插入图片描述
记忆口诀:

方法编译看左边,运行看右边
变量都是左边

多态的优缺点

多态的好处:
提高了程序的扩展性
_
多态的弊端:
不能使用子类的特有功能

多态的转型

对于多态的弊端,进行优化,为此有了多态的转型

Test_Fu a = new Test_Zi();
a.speak();
System.out.println(a.age);
//向下转换,指向地址没有问题
Test_Zi c = (Test_Zi)a;
System.out.println(c.age);
//向上转换
a = new Test_Zi2();
a.speak();
//ClassCastException
Test_Zi d = (Test_Zi)a;
System.out.println(d.age);

在这里插入图片描述

抽象

在Java中一个没有方法体的方法应该被定义为抽象方法。而类中如果有抽象方法,该类必须定义为抽象类。

抽象类的特点

1、抽象类和抽象方法必须使用abstract关键字修饰

public abstract class 类名(){}
public abstract void eat(){}

2、抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类
3、抽象类不能实例化
方法:参照多态形式,通过父类引用指向子类(子类对象实例化),这叫做抽象类多态
4、抽象类的子类
要么重写抽象类中的所有抽象方法
要么是抽象类

抽象类成员特点

-成员变量
可以是变量也可以是常量
-构造方法
有构造方法但不能实例化:用于子类访问父类数据的初始化。
~成员方法
可以有抽象方法,限定子类必须完成某些动作
也可以有非抽象方法:提高代码复用性。

接口

接口就是一种公共的规范标准,只要符号规范标准,大家都可以通用
Java中的接口更多体现在对行为的抽象

接口的特点

1、接口用关键字interface修饰
public interface 接口名{}
2、类实现接口用implement表示
public class 类名 implement 接口名{}
3、接口不能实例化
①接口如何实例化:参照多态,通过实例化类对象实例化,这叫接口多态。
②多态形式:具体类多态,抽象类多态,接口类多态
③多态前提:有继承或者实现关系;方法重写;有父(类/接口)引用指向(子/实现)类对象
4、接口实现类
要么重写接口中的所有抽象方法
要么是抽象类

接口成员特点

~成员变量:
是静态且是常量,默认 public static final
~构造方法
接口没有构造方法,因为接口主要是对行为进行抽象的,是没有具体存在,一个类如果没有父类,默认继承Object类
~成员方法:
只能是抽象方法
默认修饰符:public abstract

在这里插入图片描述

总结

类和接口的关系

1、类和类的关系
继承关系,只能是单继承,但是可以多层继承
2、类和接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
3、接口和接口的关系
继承关系,可以单继承也可以多继承

抽象类与接口的区别

在这里插入图片描述
为什么不单独定义某一个

抽象是对事物的抽象,接口是对行为的抽象

比如:能报警的门;
如果将报警方法放到抽象中,则代表这是所有门的共性,但是有的门不能报警。
如果将开门关门放在接口门中,且也有报警功能,则代表报警的是都能开关的,报警器就不是,即将共有行为放在抽象,特有行为放在接口,通过对象继承后再实现接口里面的特有。

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

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

相关文章

语音增强学习路线图Roadmap

语音增强算是比较难的研究领域,从入门到精通有很多台阶,本文介绍一些有价值的书籍,值得反复阅读。主要分为基础类和进阶类书籍,大多都是理论和实践相结合的书籍,编程实践是抓手,让知识和基础理论变扎实。基础书籍《信号…

RT-Thread初识学习-01

1. RT-Thread 简介 1.1 RT-Thread 是什么 据不完全统计,世界有成千上万个 RTOS(Real-time operating system,实时操作系统),RT-Thread 就是其中一个优秀的作品。 RT-Thread 内核的第一个版本是熊谱翔先生在 2006 年…

分布式-分布式存储笔记

读写分离 什么时候需要读写分离 互联网大部分业务场景都是读多写少的,读和写的请求对比可能差了不止一个数量级。为了不让数据库的读成为业务瓶颈,同时也为了保证写库的成功率,一般会采用读写分离的技术来保证。 读写分离的实现是把访问的压…

LeetCode-384-打乱数组

1、列表随机 为了能够初始化数组,我们使用nums保存当前的数组,利用orignal保存初始化数组。为了实现等可能随机打乱,考虑到随机数本质上是基于随机数种子的伪随机,我们采用如下的方式实现等可能随机:我们将所有元素压…

MySQL备份恢复(十二)

文章目录1. MySQL数据损坏类型1.1 物理损坏1.2 逻辑损坏2. DBA运维人员备份/恢复职责2.1 设计备份/容灾策略2.1.1 备份策略2.1.2 容灾策略2.2 定期的备份/容灾检查2.3 定期的故障恢复演练2.4 数据损坏时的快速准确恢复2.5 数据迁移工作3. MySQL常用备份工具3.1 逻辑备份方式3.2…

【scl】博图程序的导入和导出

导入或者导出博图文件的方法(也叫移植文件) 目录 前言 ​编辑 ​编辑 前言 本篇文章主要写一下关于博图文件的导入和导出,具体要怎么样才能将写好的程序或者块移植到其他地方,下面我们一起来看! 一、程序块的导入和导…

[软件工程导论(第六版)]第4章 形式化说明技术(课后习题详解)

文章目录1. 举例对比形式化方法和欠形式化方法的优缺点。2. 在什么情况下应该使用形式化说明技术?使用形式化说明技术时应遵守哪些准则?3. 一个浮点二进制数的构成是:一个可选的符号(+或-)&…

Seata分布式事务框架-AT模式与TCC模式介绍

Seata分布式事务框架-AT模式介绍 Seata AT事务方案 Seata 的 AT 模式(Automatic Transaction)是一种无侵入的分布式事务解决方案。下面结合具体业务场景来分析其执行的原理。 业务场景 订单系统 当用户下订单时,执行以下三步流程&#x…

【NLP开发】Python实现聊天机器人(Selenium、七嘴八舌)

🍺NLP开发系列相关文章编写如下🍺:1🎈【NLP开发】Python实现词云图🎈2🎈【NLP开发】Python实现图片文字识别🎈3🎈【NLP开发】Python实现中文、英文分词🎈4🎈【…

XSS注入进阶练习篇(二)DOM型XSS注入深入

DOM型XSS注入深入1. SVG 劫持JS执行1.1 DOM树的概念与构建过程1.1.1 什么是DOM树?1.1.2 DOM树的构建过程1.2 探究img失败的原因1.3 svg标签劫持innerhtml2. details标签 特定条件下劫持JS执行2.1 事件触发流程2.2 实例3.DOM clobbering 绕过3.1 什么是DOM clobberin…

Redis内存回收

Redis 内存回收 Redis之所以性能很强&#xff0c;最主要的原因是基于内存存储&#xff0c;然而单节点的Redis其内存大小不宜过大&#xff0c;会影响持久化或主从同步性能 可以通过修改配置文件来设置Redis的最大内存 maxmemory <bytes>当内存达到上限时&#xff0c;就…

营销狂人杜国楹的两大顶级思维

“营销狂人”小罐茶 杜国楹两大顶级思维 1.一定要有【参照物思维】 2.一定要有【终局思维】 趣讲大白话&#xff1a;大牛的思考就是不同 *********** 杜国楹对茶行业思考 1.参照咖啡、酒的发展路径 2.中国茶工业化,品牌化是唯一壮大之路 3.龙头企业必须全品 没有参照物思维就没…

Python将内容写入文件的方法总结。

使用Python写入文件是我们coder的日常&#xff0c;本篇带你详细看一下python将内容写入文件的方法以及细节。主要包括write()方法、writelines() 方法、print() 函数、使用 csv 模块、使用 json 模块。 目录 一、write()方法 二、writelines() 方法 三、print() 函数 四、使…

【Java】中的各种锁

Java提供了种类丰富的锁&#xff0c;每种锁因其特性的不同&#xff0c;在适当的场景下能够展现出非常高的效率。 一、Java锁是什么&#xff1f;为什么要用Java锁&#xff1f; 在并发编程中&#xff0c;经常遇到多个线程访问同一个共享资源 &#xff0c;这时候作为开发者必须考…

【汇编】一、环境搭建(一只 Assember 的成长史)

嗨~你好呀&#xff01; 我是一名初二学生&#xff0c;热爱计算机&#xff0c;码龄两年。最近开始学习汇编&#xff0c;希望通过 Blog 的形式记录下自己的学习过程&#xff0c;也和更多人分享。 这篇文章主要讲述汇编环境的搭建过程。 话不多说~我们开始吧&#xff01; 系统环…

Ubuntu下安装 ntfs-3g

目录1.FAT32、NTFS和exFAT2.ubuntu 安装 ntfs-3g2.1 直接安装2.2 源码安装1.FAT32、NTFS和exFAT U盘在格式化的时候都会有三种格式分别是FAT32、NTFS和exFAT。 FAT32格式   FAT32格式硬盘分区的最大容量为2TB&#xff0c;虽然U盘做不到&#xff0c;但是现在1xTB硬盘都有了&…

实现8086虚拟机(三)——指令解码

文章目录中间指令格式解码模块的实现编译器将汇编语句翻译成机器指令&#xff0c;而虚拟机做的工作正好相反&#xff0c;就是将机器指令解码成可以识别的中间形式&#xff0c;然后执行。为什么要这么做&#xff1f;拿 mov 指令举例&#xff0c;看下它的机器指令的格式&#xff…

手动创建 vue2 ssr 开发环境

本文和个人博客同步发表 更多优质文章查看个人博客 前言 手动搭建 vue ssr 一直是一些前端开发者的噩梦&#xff0c;因为其中牵扯到很多依赖包之间的配置以及webpack在node中的使用。就拿webpack配置来说&#xff0c;很多前端开发者还是喜欢用webpack-cli脚手架搭建项目。导致…

NCHW - NHWC - CHWN 排列

TensorFlow有两种数据格式NHWC和NCHW,默认的数据格式是NHWC,可以通过参数data_format指定数据格式。这个参数规定了 input Tensor 和 output Tensor 的排列方式。 1、data_format 设置为 “NHWC” 时,排列顺序为 [batch, height, width, channels] 设置为 “NCHW” 时,排…

Linux中常用命令汇总三

Linux中常用命令汇总二地址&#xff1a;https://blog.csdn.net/u011837804/article/details/1289972501、用户组管理类每个用户都有一个用户组&#xff0c;系统可以对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同&#xff0c;如Linux下的用户属…