JAVA学习笔记22(面向对象三大特征)

news2024/11/16 7:44:41

1.面向对象三大特征

​ *封装、继承和多态

1.1 封装

封装(encapsulation)就是把抽象出的数据[属性]和对数据的操作*[方法**]封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作[方法],方能对数据进行操作

1.封装的理解和好处

1.隐藏实现细节

2.可以对数据进行验证,保证安全合理

2.封装的实现步骤

1.将属性进行私有化private [不能直接修改属性]

2.提供一个公共的(public)set方法,用于对属性判断并赋值

public void setXxx(类型 参数名)

{

​ //Xxx表示某个属性

​ 属性 = 参数名;

}

3.提供一个公共的get方法,用于获取属性的值

public XX getXxx()

{

​ return xx;

}

class Person
{
	publci String name;
    private int age;
    private double salary;
    
    public String getName()
    {
		return name;
    }
    
    public void setName(String name)
    {
		this.name = name;
    }
}

1.2 继承

​ *解决代码复用性

​ *代码的扩展性和维护性提高了(如果要加方法,只需在父类中加,可以扩展到所有子类)

​ *当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法

在这里插入图片描述

1.继承的基本语法

class 子类 extends 父类
{

}

1.子类就会自动拥有父类定义的属性和方法

2.父类又叫超类(super),基类

3.子类又叫派生类

2.继承的细节

1.子类继承了所有的属性和方法,但是私有属性和方法不能再子类直接访问,要通过公共的方法去访问

2.子类必须调用父类的构造器,完成父类的初始化

public class Sub extends Base
{
    public Sub()	//子类
    {
		super();	//默认调用父类的无参构造器,写和不写都一样
    }
}

3.当创建子类对象时,不管使用子类的那个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译会不通过

4.如果希望指定去调用父类的某个构造器,则显式的调用一下:super(参数列表)

5.super在使用时,必须放在构造器第一行

6.super()和this() 都只能放在构造器第一行,因此这两个方法不能共存在一个构造器 //this()表示调用子类的构造器

7.java所有类都是Object类的子类,Object是所有类的基类

8.父类构造器的调用不限于直接父类,将一直往上追溯知道Object类(顶级父类)

9.子类最多只能继承一个父类(直接继承),即java中时单继承机制

10.不能滥用继承,子类和父类之间必须满足is–a的逻辑关系

在这里插入图片描述

public class ExtendsTheory
{
	public static void main(String[] args)
    {
        Son son = new Son();//内存的布局
        System.out.println(son.name);//返回的就是大头儿子
        System.out.println(son.age);	//如果子类没有这个属性就直接看父类,父类为39
                System.out.println(son.hooby);	//父类没有就访问爷爷类
    }
}

class GrandPa
{
    String name = "大头爷爷";
    String hobby = "旅游"
}

class Father extends GrandPa
{
	String name = "大头爸爸";
    int age = 39;
}

class Son enxtends Father
{
    String name = "大头儿子";
}

1.3 super关键字

​ *super代表父类的引用,用于访问父类的属性、方法、构造器

1.基本语法

1.访问父类的属性,但不能访问父类的private属性

super.属性名;

2.访问父类的方法,不能访问父类的private方法

super.方法名(参数列表)

3.访问父类的构造器

super(参数列表);

只能放在构造器的第一句,只能出现一句

2.super给编程带来的遍历/细节

1.调用父类的构造器的好处(分工明确,父类的属性由父类初始化,子类的属性由子类初始化)

2.当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super,如果没有重名,使用super、this、直接访问时一样的效果

3.super的访问不限于直接父类,如果爷爷类和本类中有同名的成员,也可以用super去访问爷爷类的成员,如果基类(上级类)中都有同名成员,使用super访问遵循就近原则。

3.super和this的比较

在这里插入图片描述

1.4 方法重写/覆盖(Override)

​ *基本介绍

方法覆盖(重写)就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的方法

class Animal
{
	public void cry()
    {
		System.out.println("动物再叫...")
    }
}

publci class Dog extends Animal
{
	public void cry()
    {
        System.out.println("小狗汪汪叫...");
    }
}

1.注意事项和使用细节

​ *方法重写也叫方法覆盖

​ *需满足条件:

1.子类的方法的参数列表方法名称,要和父类方法的参数,方法名称完全一样

2.子类的返回类型和父类方法返回类型一样,或者是父类返回类型的子类

​ *比如 父类 返回类型是Object,子类方法返回类型是String(String是Object的子类)

在这里插入图片描述

3.子类方法不能缩小父类方法的访问权限

public > protected > 默认 > private

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

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

相关文章

椋鸟数据结构笔记#6:堆及其实现

文章目录 堆的概念堆的实现由数组调整为堆堆向下调整算法通过向下调整算法构建堆 从空堆开始插入节点堆向上调整算法通过向上调整算法构建堆 删除堆顶的元素实现代码 堆的作用 萌新的学习笔记,写错了恳请斧正。 堆的概念 如果有一个关键码的集合 K { k 0 , k 1 , …

基于java的电影院售票网站

开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclip…

Doris实践——同程数科实时数仓建设

目录 前言 一、早期架构演进 二、Doris和Clickhouse选型对比 三、新一代统一实时数据仓库 四、基于Doris的一站式数据平台 4.1 一键生成任务脚本提升任务开发效率 4.2 自动调度监控保障任务正常运行 4.3 安全便捷的可视化查询分析 4.4 完备智能的集群监控 五、收益与…

网络与并发编程(一)

并发编程介绍_串行_并行_并发的区别 串行、并行与并发的区别 串行(serial):一个CPU上,按顺序完成多个任务并行(parallelism):指的是任务数小于等于cpu核数,即任务真的是一起执行的并发(concurrency):一个CPU采用时间…

Java 变得越来越像 Rust?

随着编程技术的增强和复杂性的提升,许多编程语言也纷纷效仿,Java 也不例外。 另一边,尽管社区内部问题重重,但 Rust 仍逐年获得开发人员的喜爱。这背后都是有原因的:Rust 的编译器让开发人员避免了各种问题。编译器对…

Spring的BeanFactory和FactoryBean有什么区别?

两者的区别 BeanFactory定义了ioc容器的最基本形式,并提供了ioc容器应遵守的的最基本的接口,也就是Spring ioc所遵守的最底层和最基本的编程规范,它只是个接口,并不是ioc容器的具体实现。它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。再来说说…

jvisualvm 使用教程

之前看过 jvisualvm,但是那个时候对 JVM 并不是很熟悉,后面看了下八股文,看了下 JVM 的相关知识之后,发现多了解点 JVM 的东西,对我们 CRUD 其实是有指导意义的,就比如我们通常会 new 一堆的没有用到的对象…

Vue项目+ 打包解决静态资源无法加载和路由加载无效(404)问题

vue项目npm run build打包发到服务器上,背景图片消失 问题 登录页背景图片丢失 控制台报错 找到我们的 config文件夹下面的 index.js 配置文件找到其中的 build 相关配置,assetsPublicPath 这一项默认配置的是‘/’ 我们将他改成 ‘./’ 修改后 修…

【数据结构】初识数据结构与复杂度总结

前言 C语言这块算是总结完了,那从本篇开始就是步入一个新的大章——数据结构,这篇我们先来认识一下数据结构有关知识,以及复杂度的相关知识 个人主页:小张同学zkf 若有问题 评论区见 感兴趣就关注一下吧 目录 1.什么是数据结构 2.…

k8s 部署 canal 集群,RocketMQ 模式

k8s 部署 canal 集群,RocketMQ 模式 k8s 部署 canal 集群,RocketMQ 模式前提MySQLRocketMQ制作 canal-admin、canal-server 镜像 部署 zookeeper部署 canal-admin部署 canal-server测试 k8s 部署 canal 集群,RocketMQ 模式 前提 MySQL 开启…

Excel制作甘特图

使用Excel表格制作甘特图,可根据任务开始时间和结束时间自动计算工时,并自动用指定颜色填充横道图。 1.新建Excel文档,先设置项目基本信息,包括表格名称,这里设置为“**项目甘特图”;然后添加任务序号列&a…

移动端WEB开发之响应式布局

一、响应式开发 1.1 响应式开发原理 就是使用媒体查询针对不同宽度的设备进行布局和样式的设置,从而适配不同设备的目的。 1.2 响应式布局容器 响应式需要一个父级做为布局容器,来配合子级元素来实现变化效果。原理就是在不同屏幕下,通过媒体…

机器狗首次阵亡!美国警方披露详情

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 那天,唯一的伤亡者是我们的机器狗。 美国警察最新公布一则案件:波士顿…

python set是什么类型

python set是一种数据类型,数学里的集合概念,在Python语言里对应的是set类型。与list,tuple不同的地方是,set更加强调的是一种“从属关系”(membership),跟顺序无关,所以有重复的元素…

达梦数据库 索引管理

索引的基本认识 索引是为了快速检索和定位数据行而创建的一种数据结构。索引是由表中索引列数据进行排序后的集合和指向这些值的物理标识(例如:ROWID 等聚集索引键)共同组成。在 DM 中,除了位图索引、位图连接索引、全文索引和空…

代码随想录算法训练营第二十九天(回溯5)|491. 非递减子序列、46. 全排列、47. 全排列 II(JAVA)

文章目录 491. 非递减子序列解题思路源码 46. 全排列解题思路源码 47. 全排列 II解题思路源码 总结 491. 非递减子序列 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 …

练手项目层初阶1—《详解静态版本——通讯录管理系统》

文章目录 🚩前言🔊 项目需求📚 项目知识点包含🧩项目框架📝框架拆解分析✨Struct_book.h 头文件解析✨Struct_book.c文件解析✨test_book.c文件解析 📺演示效果🚀完整代码 🚩前言 俗…

Linux下Qt生成程序崩溃文件

文章目录 1.背景2.Qt编译生成程序2.1.profile模式的本质 3.执行程序,得到core文件4.代码定位4.1.直接使用gdb4.2.使用QtCreator 5.总结6.题外话6.1.profile模式和debug模式的区别 1.背景 在使用Qt时,假如在windows,当软件崩溃时,…

Linux 服务器间SSH免密码登录与拷贝文件(SCP)

适用背景 工作中频繁登录服务器和拷贝文件,都会提示输入密码在持续集成的场景下,自动部署应用时是没有人工干预的 解决方案 下面以实现A服务器到B服务器的免密码登录和拷贝文件为例,介绍相关的配置。(即A访问B不需要输密码&…

不能在主机和虚拟机之间拷贝文本(虚拟机ubuntu16.04)

问题 ubuntu16.04不能在主机和虚拟机之间拷贝文本。 原因 vmware tools没安装好。 解决办法 重新安装vmware tools,步骤入下: 让虚拟机加载C:\Program Files (x86)\VMware\VMware Workstation\linux.iso光盘文件,设置如下: …