Java面向对象

文章目录

  • 一、封装
  • 二、继承
  • 三、多态

一、封装

1、用private对类的成员属性进行封装(这时这个属性只能在当前类当中使用),可用idea生成或自己写接口(接口是成员方法),鼠标点击generate和Getter and Setter生成接口。
接口:

public String getName(){
    return this.name;
}
public void setName(String name){
    this.name;
}

2、封装:通过关键字private对类的成员进行隐藏,只对类外提供公开的接口。封装的意义:隐藏类的实现细节,从而达到安全性。

二、继承

1、继承:对共性进行抽取。继承的意义:达到代码的复用。(在定义子类时用关键字extends,如public class Dog extends Animal)
2、super关键字:在子类方法中访问父类继承下来的成员(相当于是子类对象中从父类继承下来的那部分成员的引用),super.data访问父类的成员变量,super.func()访问父类的成员方法。static修饰的方法里面不能使用super(和this一样)。子类继承父类之后,实例化子类对象的时候,先帮助父类进行构造(在子类的构造方法中用super()调用父类的构造方法),再构造子类自己。子类无参数构造方法(编译器自带默认构造方法)或有参构造方法中默认会存在super()(super()的括号中没有参数)的调用,用户没有写编译器也会增加,但是this()用户不写则没有。super()只在子类构造方法中出现一次。因为super()也只能放在构造方法的第一行,所以super()和this()不能同时使用。

三、多态

1、向上转型:父类引用去引用子类对象。
2、发生向上转型的三种时机。
(1)直接赋值时:

Animal animal = new Dog("小狗",10)

(2)方法传参时:

func1(dog);
public static void func1(Animal animal){
}

(3)方法返回值返回时:

Animal animal=func2();
public static Animal func2(){
   return new Dog("小狗",10);
}

3、向上转型后,通过父类引用调用这个父类和子类重写(覆盖,覆写)的方法,结果是调用了子类的方法,这个过程叫做运行时绑定(后期绑定,动态绑定),向上转型的缺点是不能调用子类特有的方法
编译时绑定(前期绑定,静态绑定):方法的重载,在编译时通过方法的参数等就能确定调用的是哪个方法
4、方法重写注意事项(方法重写:方法的名字、参数类型个数名称、返回值类型相同,可用idea生成重写方法,点击generate和Override Methods…):
(1)被private、static、final(密封方法)修饰的方法、构造方法不能重写
(2)访问修饰限定符private<默认权限<protected<public,重写方法的访问权限高于或等于父类中被重写方法的访问权限
(3)重写方法与被重写方法的返回值可以不同,但必须满足父子类关系,如被重写方法的返回值类型为Animal,重写方法的返回值类型可以为Dog,返回值构成父子类关系时叫协变类型
(4)在重写方法的前面写上@Override注释,这个注释能帮我们进行合法性校验,如不小心把重写方法的名字写错了(写成watsh),编译器就会发现父类中没有watsh方法,这时就会编译报错无法构成重写
重写的设计原则:对于已经投入使用的类,尽量不要进行修改,重新定义一个新的类,来重复利用其中共性的内容,并且添加或者改动新的内容。
5、31、向下转型:父类引用还原为子类对象,向下转型不安全,为提高安全性引入instanceof。

Animal animal2 =new Bird("小鸟",10);
if(animal2 instanceof Bird){
    Bird bird =(Bird)animal2;
    bird.fly();
}

6、多态:当我们引用的子类对象不一样的时候,通过父类引用调用同一个重写的方法,表现出来的行为不一样,这种思想叫做多态。属性和构造方法没有多态性。多态缺陷:代码运行效率降低。

public static void drawMap(Shape shape){
    shape.draw();//draw()方法进行了重写,这里发生了向上转型和动态绑定,这里Shape是父类
}
public static void main(String[] args){
    Cycle cycle =new Cycle();
    Rect rect=new Rect();
    drawMap(cycle);
    drawMap(rect);
}

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

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

相关文章

算法记录lday4 LinkedList链表交换 删除倒数N个点 环形链表

今日任务 ● 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II 两两交换链表中的节点 题目描述 Given a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modi…

错题汇总03

1.以下对二维数组a进行正确初始化的语句是 A int a[2][]{{0,1,2},{3,4,5}} B int a[][3]{{0,1,2},{3,4,5}} C int a[2][4]{{0,1,2},{3,4},{5}}; D int a[][3]{{0,,2},{},{3,4,5}} A数组列不能省略 C数组越界 D数组初始化每一行必须连续初始化 2.能把函数处理结果的二个数据…

存储资源调优技术——SmartDedupe智能数据重删、SmartCompression智能数据压缩技术

目录 SmartDedupe智能数据重删技术 SmartCompression智能数据压缩技术 SmartDedupe智能数据重删技术 基本概念 智能数据重删技术 是一种数据缩减技术&#xff0c;通过删除存储系统中的冗余数据块 减少数据占用的物理存储容量&#xff0c;节省存储空间&#xff08;会降低性能&a…

【Java笔试强训 13】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;参数解析…

【YOLO系列】YOLOv7论文超详细解读(翻译 +学习笔记)

前言 终于读到传说中的YOLOv7了~≖‿≖✧ 这篇是在美团的v6出来不到一个月就高调登场&#xff0c;作者还是我们熟悉的AB大神&#xff08;对&#xff0c;就是v4那个&#xff09;&#xff0c;读起来又是“熟悉”的感觉&#xff08;贯穿了我的整个五一假期&#xff08;╯&#x…

Qt第一天:创建Qt项目

方式一&#xff1a;使用向导创建 打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项 弹出New Project对话框&#xff0c;选择Qt Widgets Application 选择【Choose】按钮&#xff0c;弹出如下对话框 设置项目名称和路径&#xff0c;按照…

软件测试:测试一个网站

一、软件测试的原则 1、软件测试应尽早执行&#xff0c;并贯穿于整个软件生命周期 2、软件测试应追溯需求 3、测试应由第三方来构造 4、穷举测试是不可能的,要遵循 Good-enough 原则 5、必须确定预期输出&#xff08;或结果&#xff09; 6、必须彻底检查每个测试结果 7、…

CH32V307V-EVT-R1 简单上手入门

文章目录 〇、前言一、开发板展示以及介绍二、开发环境配置与搭建2.1 IDE 介绍2.2 IDE 环境搭建2.3 IDE 配置2.3.1 语言切换&#xff08;汉化&#xff1f;不存在的&#xff09; 三、初次烧录与体验四、简单总结与心得&#x1f517; 链接直达 〇、前言 运气不错&#xff0c;前几…

Baklib推荐:关于建设企业知识管理的有效方法

随着信息化和互联网技术的不断发展&#xff0c;企业面临着海量的信息和知识&#xff0c;如何有效地管理和利用这些信息和知识已经成为了企业发展的关键问题之一。企业知识管理是指企业利用信息技术手段&#xff0c;对企业内部的知识进行系统化、集成化、共享化管理&#xff0c;…

4D毫米波雷达聚类检测和追踪

代码&#xff1a;https://github.com/Xiao-Hu-Z/RaderDetectionAndTracking 代码正在写&#xff0c;实时更新&#xff01; 流程 4D雷达毫米波聚类跟踪流程如下图&#xff1a; 预处理主要包括标定、坐标转换和动静分离。 标定使用水平仪、角反&#xff0c;采集数据分析&…

fastai2 实现SSD

https://github.com/search?qfastaissd 有几个值得参考的代码&#xff0c;好好学习。 GitHub - Samjoel3101/SSD-Object-Detection: I am working on a SSD Object Detector using fastai and pytorch fastai2实现的SSD&#xff0c;终于找到了code。https://github.com/sidrav…

【NLP实战】基于Bert和双向LSTM的情感分类【上篇】

文章目录 前言简介数据获取与提取数据清洗读取数据&#xff0c;查看数据清洗训练集观察数据分布去除空数据去除重复数据关于去除停用词关于特殊符号储存清洗后的数据集 清洗测试集观察数据分布去除空数据去除重复数据(并储存) 清洗验证集观察数据分布去除空行去除重复数据(并储…

16.基于主从博弈理论的共享储能与综合能源微网优化运行研究

说明书 MATLAB代码&#xff1a;基于主从博弈理论的共享储能与综合能源微网优化运行研究 关键词&#xff1a;主从博弈 共享储能 综合能源微网 优化调度 参考文档&#xff1a;《基于主从博弈理论的共享储能与综合能源微网优化运行研究》完全复现 仿真平台&#xff1a;MATLAB …

图解项目管理必备十大管理模型

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 心智模型 心智模型是根深蒂固存在于人们心中&#xff0c;影响人们如何理解这个世界&#xff08;包括我们自己、他人、组织和整个世界&#xff09;&#xff0c;以及…

pytest - Getting Start

前言 项目开发中有很多的功能&#xff0c;通常开发人员需要对自己编写的代码进行自测&#xff0c;除了借助postman等工具进行测试外&#xff0c;还需要编写单元测试对开发的代码进行测试&#xff0c;通过单元测试来判断代码是否能够实现需求&#xff0c;本文介绍的pytest模块是…

Android APK 反编译后重新打包并签名

APKTool&#xff1a; Apktool 是一个逆向android非常有用的工具&#xff0c;可以用来反编译apk文件&#xff0c;并且能在修改部分资源文件后&#xff0c;重新打包成一个新的apk。 下载连接&#xff1a;http://ibotpeaches.github.io/Apktool/install/ 下载之后文件夹非常清爽&…

ChatGPT会颠覆SEO内容创作吗

近几年 AI 的发展日新月异。除了搜索算法本身大规模应用人工智能&#xff0c;我也一直关注着 AI 用于写作的进展。 上篇关于 Google 有用内容更新的帖子还在说&#xff0c;高质量内容创作是 SEO 最难的事之一&#xff0c;对某些网站来说&#xff0c;如果能有工具帮助&#xff…

Mysql 日志

目录 0 课程视频 1 错误日志 -> 默认开启 1.1 查看变量 show variables like %log_error%; 1.2 文件位置 /var/log -> mysqld.log 1.3 指令语法 2 二进制日志 -> 修改数据和数据库结构的日志 2.1 记录原则 2.1.1 记录 数据库创建语句 和 增删改查 2.1.2 不记…

JdbcTemplate常用语句代码示例

目录 JdbcTemplate 需求 官方文档 JdbcTemplate-基本介绍 JdbcTemplate 使用实例 需求说明 创建数据库 spring 和表 monster 创建配置文件 src/jdbc.properties 创建配置文件 src/JdbcTemplate_ioc.xml 创建类JdbcTemplateTest测试是否可以正确得到数据源 配置 J…

智能算法系列之基于粒子群优化的模拟退火算法

文章目录 前言1. 算法结合思路2. 问题场景2.1 Sphere2.2 Himmelblau2.3 Ackley2.4 函数可视化 3. 算法实现代码仓库&#xff1a;IALib[GitHub] 前言 本篇是智能算法(Python复现)专栏的第四篇文章&#xff0c;主要介绍粒子群优化算法与模拟退火算法的结合&#xff0c;以弥补各自…
最新文章