Java 面向对象的三大特性

面向对象编程有三大特征: 封装、继承和多态。

1.封装

1)封装介绍
封装(encapsulation)就是把抽象出的数据[属性]和对数据的操作[方法]封装在一起数据被保护在内部.程序的其它部分只有通过被授权的操作[方法],才能对数据进行操作。
2)封装的理解和好处
隐藏实现细节 : 方法(连接数据库)<--调用(传入参数.)2)可以对数据进行验证,保证安全合理
Person {name, age}
Person p = new Person();
p.name = "iack";
p.age = 1200;
3)封装的实现步骤(三步)
(1)将属性进行私有化private[不能直接修改属性]
private int Xxx;
(2)提供一个公共的(public)set方法,用于对属性判断并赋值
public void setXxx(类型 参数名){//Xxx   表示某个属性
//加入数据验证的业务逻辑
属性 = 参数名;
}
(3)提供一个公共的(public)get方法,用于获取属性的值
public 数据类型 getXxx(){//权限判断,Xxx 某个属性
return Xxx;
}

2.继承

1)继承介绍
继承可以解决代码复用 , 让我们的编程更加靠近人类思维 . 当多个类存在相同的属性 ( 变量 ) 和方法时 , 可以从这些类中抽象出父类, 在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过 extends 来声明继承父类即可。画出继承的示意图
2)继承的基本语法
class 子类 extends 父类{}
1)子类就会自动拥有父类定义的属性和方法
2)父类又叫 超类,基类
3)子类又叫派生类
3)super基本介绍
super 代表父类的引用,用于访问父类的属性、方法、构造器
(1)访问父类的属性,但不能访问父类的private属性
(2)super.属性名:访问父类的方法,不能访问父类的private方法super.方法名(参数列表):
(3)访问父类的构造器:
(4)super(参数列表);只能放在构造器的第一句,只能出现一句!
super和this的比较

3.多态

1)多态基本介绍
方法或对象具有多种形态。是面向对象的第三大特征,多态是建立在封装和继承基础之上的。
(1)一个对象的编译类型和运行类型可以不一致
(2)编译类型在定义对象时,就确定了,不能改变
(3)运行类型是可以变化的编译类型看定义时 = 号 的左边,运行类型看 = 号的 右边
比如:
Animal animal = new Dog(); [编译类型是Animal,运行类型Dog]
animal = new Cat();[animal 的运行类型变成了 Cat, 编译类型仍然是 Animal)
2)多态注意事项和细节讨论
多态的 前提是: 两个对象(类)存在继承关系
多态的 向上转型
(1)本质:父类的引用指向了子类的对象
(2) 语法:父类类型 引用名 = new 子类类型();
(3)特点: 编译类型看左边,运行类型看右边。
可以调用父类中的所有成员(需遵守访问权限),
不能调用子类中特有成员;
最终运行效果看子类的具体实现!
多态的 向下转型
(1)语法: 子类类型  引用名  (子类类型)父类引用;
(2)只能强转父类的引用,不能强转父类的对象
(3)要求父类的引用必须指向的是当前目标类型的对象
(4)当向下转型后,可以调用子类类型中所有的成员
3)java的动态绑定机制*
Java 重要特性 : 动态绑定机制
java的动态绑定机制: .
(1)当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
(2)当调用对象属性时,没有动态绑定机制,哪里声明,那里使用
示例:

public class DynamicBinding {public static void main(String[] args) {//a的编译类型A 运行类型BA a=new B();//向上转型System.out.println(a.i);//调用对象属性,输出10System.out.println(a.sum());//调用对象方法,输出40System.out.println(a.sum1());//调用对象方法,输出30}
}
class A{//父类public int i=10;//动态绑定机制public int sum(){//父类sum()return getI()+10;//}public int sum1(){//父类sum1()return i+10;//}private int getI() {return i;}
}
class B extends A{//子类public int i=20;//动态绑定机制public int sum1(){return i+10;//}public int sum(){return getI()+20;//}private int getI() {//子类getI()return i;}
}

 

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

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

相关文章

Springboot使用ProcessBuilder创建系统进程执行shell命令备份数据库

文章目录 概要1、查看mysql版本2、相关依赖3、具体代码技术细节 概要 Springboot执行shell命令备份数据库。 1、查看mysql版本 mysql --version2、相关依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-star…

【力扣-每日一题】901. 股票价格跨度

暴力解法&#xff1a; class StockSpanner { private:vector<int> pri; public:StockSpanner() {}int next(int price) {pri.emplace_back(price);int count0;for(int ipri.size()-1;i>0;i--){if(pri[i]<price)count;else break;}return count;} };/*** Your Stoc…

AI 大框架基于python来实现基带处理之TensorFlow(信道估计和预测模型,信号解调和解码模型)

AI 大框架基于python来实现基带处理之TensorFlow(信道估计和预测模型,信号解调和解码模型) 基带处理&#xff08;Baseband Processing&#xff09;是一种信号处理技术&#xff0c;用于在通信系统中处理和调制基带信号。基带信号是指未经过调制的信号&#xff0c;通常包含原始数…

如何使用API进行大规模数据收集和分析

在当今信息爆炸的时代&#xff0c;如何高效地进行大规模数据收集和分析是一项重要的能力。API&#xff08;Application Programming Interface&#xff09;作为一种常见的数据交互协议&#xff0c;提供了访问和操作数据的接口&#xff0c;为我们提供了便利。本文将介绍如何使用…

HDLbits: ece241 2014 q7b

题目要求用10进制的BCD计数器来构造1000计数&#xff0c;其实也是将1000hz的时钟信号改造成1hz&#xff0c;我们首先计算出10的三次方等于1000&#xff0c;需要三个10进制的计数器&#xff0c;去计999的中高低位。 最低位的计数器一直在对时钟信号计数&#xff0c;因此enable1…

Perforce发布《2023游戏开发与设计现状报告》,为游戏开发行业提供参考

近期&#xff0c;Perforce发布了《2023游戏开发与设计现状报告》。此报告调查了来自全球各地的游戏开发专业人士&#xff0c;了解他们面临的主要开发挑战、使用的工具和流程&#xff0c;以及目前最让他们对这个行业感到兴奋的方面。 龙智作为Perforce授权合作伙伴&#xff0c;…

第85步 时间序列建模实战:CNN回归建模

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们介绍CNN回归。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndrome i…

什么是生成式人工智能?人工智能创造

原文地址&#xff1a;什么是生成式人工智能&#xff1f;人工智能创造 生成式人工智能模型可以进行对话、回答问题、编写故事、生成源代码以及创建几乎任何描述的图像和视频。以下是生成式人工智能的工作原理、使用方式以及其局限性比您想象的要大的原因。 生成式人工智能是一种…

【JavaEE重点知识归纳】第6节:数组

目录 一&#xff1a;数组的基本概念 1.什么是数组 2.数组的创建和初始化 3.数组的使用 ​编辑二&#xff1a;数组是引用类型 1.了解JVM的内存分布 2.基本类型变量和引用类型变量的区别 3.认识null 三&#xff1a;数组的应用场景 1.保存数据 2.作为函数的参数 3.作为…

BUUCTF Basic 解题记录--BUU XXE COURSE

1、XXE漏洞 初步学习&#xff0c;可参考链接&#xff1a; 一篇文章带你深入理解漏洞之 XXE 漏洞 - 先知社区 2、了解了XXE漏洞&#xff0c;用burpsuite获取到的url转发给repeater&#xff0c;修改XML的信息&#xff0c;引入外部实体漏洞&#xff0c;修改发送内容&#xff0c;…

ubuntu系统开机黑屏(只显示logo、左上角光标闪烁)问题

问题背景 在使用pycharm的时候&#xff0c;我使用了pycharm的快捷键ctrlaltF7&#xff0c;结果进入了ubuntu的ttf界面&#xff0c;由于之前不知道这个东西&#xff0c;百度一顿乱搜&#xff0c;以为显卡驱动出问题了&#xff0c;就把驱动删了&#xff0c;其实我完全可以ctrlal…

kotlin:list的for循环

代码&#xff1a; var list { "a", "b", "c" } for (i in list.indices) {print("app"i""list[i]) }

Library <iconv2.4.0> not found 解决方法

1、升级到Xcode15之后&#xff0c;跑到C的库出现了这个问题。 2、于是去Xcode里面搜了一下&#xff0c;这个库已经搜不到了&#xff0c;但是项目里还是配置的&#xff0c;于是接下意识把它删掉了&#xff0c;就不报错了&#xff0c;顺手还把类似的这个库给加进去了 3、而且跑起…

[JAVAee]SpringBoot-AOP

目录 Spring AOP ​编辑AOP适用场景 AOP的组成 连接点(Join Point) 切点(Pointcut) 通知(Advice) Spring AOP的实现 添加依赖 定义切面与切点 切点表达式的说明 定义相关的通知 Spring AOP AOP(Aspect Oriented Programming)是面向切面编程,是一种设计思想.对某一类…

termius mac版无需登录注册直接永久使用

1. 下载地址&#xff1a;termius下载 2. 解压安装 3. 当出现 “termius”已损坏,无法打开 则输入以下命令即可&#xff1a;sudo xattr -r -d com.apple.quarantine /Applications/Termius.app 最后去 系统设置-> 隐私与安全性-> 仍要打开 4. 删除app-update.yml文件&…

竞赛选题 深度学习 python opencv 动物识别与检测

文章目录 0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存…

Android Camera FW 里的requestId和frameId

安卓相机frameworks里面经常出现requestId和frameId&#xff0c;最近简单看了一下代码&#xff0c;发现相关流程还是很复杂的&#xff0c;总结来看requestId 就是上层&#xff08;java&#xff09;发送的repeating(capture)请求的id&#xff0c;是从0开始递增的。 这是CameraD…

jira 浏览器插件在问题列表页快速编辑问题标题

jira-issueTable-quicker 这是一个可以帮助我们在问题表格页快速编辑问题的浏览器插件 github 地址 功能介绍 jira 不可否认是一个可以帮助有效提高工作效率的工具&#xff0c;但是我们在使用 jira 时使用问题表格可以让我们看到跟多的内容而不用关注细节&#xff0c;但是目…

简单两步实现离线部署ChatGPT,ChatGPT平替版,无需GPU离线搭建ChatGPT

文末附主程序安装包和大模型参数文件~ 演示效果如下图所示&#xff1a; 一、使用方法 软件主要分为两个部分&#xff1a;GPT4ALL软件主体&#xff08;主程序&#xff09;模型参数&#xff08;离线模型&#xff09;&#xff0c;如果使用API Key的话则不需要下载模型参数。 可以…

GPIO定义

//LED端口定义 #define LED0 PBout(8) // DS0 work #define LED1 PBout(9) // DS1 txrx#define POWA_ON GPIO_SetBits(GPIOA,GPIO_Pin_5) //继电器1 #define POWA_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_5)#define POWB_ON GPIO_SetBits…