c 子类对象 访问父类对象受保护成员_java面向对象总结

da638f7a707ce09c4dce079eba90d6f3.png

前言:文章参考《java疯狂讲义》进行总结和归纳,知识要进行输出才算真正的有用。

在java的世界里,一切皆为对象,类是对对象的抽象,来一个例子:Person类

public 

有了类,就可以创建者个类的对象了,语法如下:

Person p1 = new Person("tom",9,"Beijing");//创建对象
p1.eat();//调用方法

java的三个特点是:继承、封装、多态,都是和面向对象有关系的,下面进行解释

1 继承

继承就是子类继承父类的特征和和行为,使得子类对象(实例)具有父类的实例域和方法,还可以以此基础添加新方法和域来满足需求,举个例子:

Person类是父类,那么Student类是子类(学生是人,满足is-a关系),java规定一个子类只能拥有一个父类,子类对象实例化时一定先实例化父类对象。

public class Person{//父类}//子类继承父类
public class Student extents Person{}

特点:提高代码复用性、父类的属性方法可以用于子类、 可以轻松的定义子类、 使设计应用程序变得简单。

注意事项:只支持单继承,即一个子类只允许有一个父类,但是可以实现多级继承,及子类拥有唯一的父类,而父类还可以再继承。​ 子类可以拥有父类的属性和方法。​ 子类可以拥有自己的属性和方法。​ 子类可以重写覆盖父类的方法。

继承的使用:

a,直接通过子类对象访问成员变量

​ 等号左边是谁,就优先使用谁,如果没有就向上找。

b,间接通过成员方法访问成员变量

该方法属于谁,谁就优先使用,如果没有就向上找。

public class FU {int numFU = 10;int num = 100;public void method(){System.out.println("父类成员变量:"+numFU);}public void methodFU(){System.out.println("父类成员方法!");}
}
public class Zi extends FU{int numZi = 20;int num = 200;public void method(){System.out.println("子类成员变量:"+numFU);}public void methodZi(){System.out.println("子类方法!");}
}
public class ExtendDemo {public static void main(String[] args) {FU fu = new FU();// 父类的实体对象只能调用父类的成员变量System.out.println("父类:" + fu.numFU);   // 结果:10Zi zi = new Zi();System.out.println("调用父类:" + zi.numFU); // 结果:10System.out.println("子类:" + zi.numZi);   // 结果:20/** 输出结果为200,证明在重名情况下,如果子类中存在则优先使用,*  如果不存在则去父类查找,但如果父类也没有那么编译期就会报错。*/System.out.println(zi.num); // 结果:200/*** 通过成员方法调用成员变量*/zi.method();    // 结果:10}
}

​成员方法也是一样的,创建的对象是谁,就优先使用谁,如果没有则直接向上找。

注意事项:​ 无论是成员变量还是成员方法,如果没有都是向上父类中查找,绝对不会向下查找子类的

在继承关系中,关于成员变量的使用:

局部成员变量:直接使用

本类成员变量:this.成员变量

父类成员变量:super.父类成员变量

2 封装

封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。

特点:对成员变量实行更准确的控制,封装可以隐藏内部程序实现的细节,良好的封装能够减少代码之间的耦合度,外部成员无法修改已封装好的程序代码,方便数据检查,有利于保护对象信息的完整性,同时也提高程序的安全性,便于修改,体高代码的可维护性

使用:使用private修饰符,表示最小的访问权限;对成员变量的访问,统一提供setXXX,getXXX方法

public class Student implements Serializable {private Long id;private String name;private Integer sex;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getSex() {return sex;}public void setSex(Integer sex) {this.sex = sex;}
}

3 多态

多态是同一个行为具有多个不同表现形式或形态的能力。

特点:消除类型之间的耦合关系,实现低耦合;灵活性;​ 可扩充性;​ 可替换性

使用:

   public class MultiDemo {public static void main(String[] args) {// 多态的引用,就是向上转型Animals dog = new Dog();dog.eat();Animals cat = new Cat();cat.eat();// 如果要调用父类中没有的方法,则要向下转型Dog dogDown = (Dog)dog;dogDown.watchDoor();}}class Animals {public void eat(){System.out.println("动物吃饭!");}}class Dog extends Animals{public void eat(){System.out.println("狗在吃骨头!");}public void watchDoor(){System.out.println("狗看门!");}}class Cat extends Animals{public void eat(){System.out.println("猫在吃鱼!");}}

向上转型:1,格式:父类名称 对象名 = new 子类名称();

含义:右侧创建一个子类对象,把它当作父类来使用。

注意:向上转型一定是安全的。 缺点:一旦向上转型,子类中原本特有的方法就不能再被调用了。

7ad7b20011a74df078e16b855989de4d.png

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

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

相关文章

多次执行sql 后卡住_解Bug之路记一次中间件导致的慢SQL排查过程

解Bug之路-记一次中间件导致的慢SQL排查过程前言最近发现线上出现一个奇葩的问题,这问题让笔者定位了好长时间,期间排查问题的过程还是挺有意思的,就以此为素材写出了本篇文章。Bug现场我们的分库分表中间件在经过一年的沉淀之后,…

c++思维导图_40+张最全Linux/C/C++思维导图,你确定不收藏?

ID:技术让梦想更伟大整理:李肖遥申明:所有图片都源自网络素材,侵删。这是我自己收集的,并花大量时间整理的可说最全的Linux/C/C思维导图。有些图可能不是高清,但是放大即可看清楚。linux思维导图认识LinuxLinux学习路径…

fortran安装_如何在 CentOS 8 上安装 GCC

本文最先发布在:如何在 CentOS 8 上安装 GCC​www.itcoder.techGNU 编译器集合是一系列用于语言开发的编译器和库的集合,包括: C, C, Objective-C, Fortran, Ada, Go, and D等编程语言。很多开源项目,包括 Linux kernel 和 GNU 工具&#xff…

seata 如何开启tcc事物_分布式事务Seata-TCC源码分析

为了更好理解分布式事务,首先提出一个问题:假设数据库中有两个表ta,tb,我们要分别更改ta表中的ra记录和tb表中的rb记录,但要求ra和rb记录都修改成功,才认为此次操作时成功,或者需要失败回滚。针…

promise的三种状态_一.Promise中核心逻辑的实现

首先看一下Promise代码:let promise new Promise((resolve,reject)>{resolve(成功);//reject(失败); }) promise.then(val>{console.log(val); },reason>{console.log(reason); })我们根据以上的一个简单的用例,得到Promise类的最主要的核心逻辑…

mysql如何定位到数据_如何快速定位当前数据库消耗CPU最高的sql语句?

概述如果是Oracle数据库我们可以很容易通过sql来定位到当前数据库中哪些消耗CPU高的语句,而mysql数据库可以怎么定位呢?这里用一个简单例子说明下...主要是了解如何定位的思路,具体看官网介绍..参考:https://www.percona.com/blog…

当当elastic-job docker快速部署_[小Z课堂]-docker 快速部署 elasticsearch 和 kibana,一键部署...

各位小伙伴,小Z课堂来袭,每天只需看三分钟,你就能用docker 快速部署各种环境。今天就用docker 来部署 elasticsearch 和 kibana。docker的入门请上度娘学习,这里直接进入实战。拉镜像镜像版本:base image:U…

数字有维度, 质数可追寻

摘要 用数轴的点表示数, 实际是把数的几何意义单一 化, 把所有实数同等化. 在研究素数的问题上, 应该挖掘数的 更多几何意义, 就正自然数而言, 不同区间的数, 几何意义是 不相同的, 对应的点是不同空间的点, 具有多样化的. 寻找质 数, 就是设法把不同空间的 1 维数 (质数) 找出…

局域网聊天程序 java MySQL_课内资源 - 基于JAVA的局域网聊天软件的设计与实现(仿制QQ)...

一、系统分析1.1 问题描述客户端实现简易版的局域网聊天器实现富文本内容聊天智能聊天机器人群发消息传送文件等功能服务器端实现群发通知管理聊天线程1.2 系统功能分析客户端功能登陆注册发送表情消息发送文本消息截取图片图片处理震动效果发送文件群发消息设置聊天文本样式服…

北工大一拟录取女研究生在网络发不当言论,已被网友举报!

近日,北工大一拟录取女研究生在自己的社交平台发表不当的言论。随后,其言论引起网友的热议。>>>>对于网友的质疑,其通过微博发文称,要“开小号专门打拳”。当天夜里,有网友通过其微博的公开的考研信息&…

java divide 用法_java中BigDecimal加减乘除基本用法

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商…

如何反映两条曲线的拟合精度_你知道850加工中心定位精度的检测有哪些吗?

你知道850加工中心定位精度的检测有哪些吗?定位精度在机械制造上指零件或刀具等实际位置与标准位置(理论位置/理想位置)之间的差距,其差距越小,说明精度越高。定位精度是零件加工精度得以保证的前提。XFL-850加工中心的…

java ee最新_从此再无 JavaEE,现在叫 JakartaEE

各位小伙伴,你们都知道这个消息吗?Java EE 正式改名为 Jakarta EE 了。以后小伙伴们自我介绍的时候又多了一种方式。(〃▽〃) :你是做什么的?( ̄▽ ̄)~* :你好我是做 JakartaEE!Σ(っД;)っ&#…

十二月份找工作好找吗_小儿推拿师工作好找吗?工资高吗?

小儿推拿师工作好找吗?会不会学成之后找不到工作?作为现在比较热门的一个医学类职业,小儿推拿师还是比较容易找工作的,现在基本一条街上能有不低于十家小儿推拿店,而这些店里面小儿推拿师只有两三个,后面孩子还有很多…

java 单例 读写锁_终极锁实战:单JVM锁+分布式锁

目录1.前言2.单JVM锁3.分布式锁4.总结正文分割线1.前言锁就像一把钥匙,需要加锁的代码就像一个房间。出现互斥操作的典型场景:多人同时想进同一个房间争抢这个房间的钥匙(只有一把),一人抢到钥匙,其他人都等待这个人出来归还钥匙&…

linux java socket编程_深入学习socket网络编程,以java语言为例

了解java的socket编程与Linux Socket API之间的关系一、java的网络编程1、socket原理socket通信就是通过IP和端口号将两台主机建立连接,提供通信。主机A的应用程序要能和服务器B进行通信,必须通过Socket建立连接,而建立Socket连接本质上就是依…

python去掉空白行_python去掉空白行的多种实现代码

这篇文章主要介绍了python去掉空白行实现代码,需要的朋友可以参考下 测试代码 php.txt1:www.php.cn 2:www.php.cn 3:www.php.cn 4:www.php.cn 5:www.php.cn 6:www.php.cn 7:www.php.cn 8:www.php.cn 9:www.php.cn 10:www.php.cn 11:www.php.cn 12:www.php.cn 13:www.php.cn 14:…

html get请求_99% 的人都理解错了 HTTP 中 GET 与 POST 的区别【面试必问】

先分析一波:1、GET和POST与数据如何传递没有关系??GET和POST是由HTTP协议定义的。那么使用哪个方式与应用层的数据如何传输是没有相互关系的。从而,HTTP就没有要求,POST一定要放到请求体里面,GET就一定要放…

hive load data外部表报错_生产SparkSQL如何读写本地外部数据源及排错

https://spark-packages.org/里有很多third-party数据源的package,spark把包加载进来就可以使用了csv格式在spark2.0版本之后是内置的,2.0之前属于第三方数据源一、读取本地外部数据源1.直接读取一个json文件[hadoophadoop000 bin]$ ./spark-shell --mas…

ffmpeg命令_使用ffmpeg命令为多个短视频修改视频备注说明

今天主要给大家讲一下使用视频剪辑高手中的ffmpeg命令为多个短视频修改备注说明的详细步骤,有需要和感兴趣的宝贝们可以跟随小编一起来试试。收集视频将需要剪辑的短视频保存到同一文件夹上进入软件双击进入视频剪辑高手,选择“批量剪辑视频”功能添加视…