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现场我们的分库分表中间件在经过一年的沉淀之后,…

centos安装mysql5.6系统崩溃_CentOS7安装MySQL5.6冲突总结

[rootlocalhost ypeng]# service mysql statusRedirecting to /bin/systemctl status mysql.serviceUnit mysql.service could not be found.出现以上安装错误的原因是:系统已经可能是系统装了其他版本的mysql-libs包或者是mysql数据库文件导致不兼容。可以将MySQL彻…

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

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

mysql logtimestamps_MySQL5.7.18参数log_timestamps导致日志信息时间差8小时

MySQL5.7.18参数log_timestamps导致日志信息时间差8小时环境:MySQL5.7.18CentOS6.8背景:排查问题查看mysql日志的时候发现mysql错误日志和慢查询日志中的时间戳信息比正常时间少了8小时.官方资料显示:log_timestamps 自5.7.2版本被引入,此参数控制了general log、er…

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

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

mysql登录root 1130_通过Navicat for MySQL远程连接的时候报错mysql 1130的解决方法

解决方法:1。改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改"mysql" 数据库里的 "user" 表里的 "host"项,从"loc…

c# out原理 ref_移植贪吃蛇——从C#到C++

欢迎参与讨论,转载请注明出处。前言因为某些机缘巧合,引起了我对C的重视。一时兴起,决定将两年前用Unity写的Snake进行移植。经过两周的抽空,总算是完成了。项目采用现代C标准编写,采用CMake构建,图形库为S…

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

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

helm安装mysql_helm安装配置

简介helm是kubernetes的包管理工具,用于简化部署和管理 Kubernetes 应用。用来管理charts——预先配置好的安装包资源。Helm和charts的主要作用:应用程序封装版本管理依赖检查便于应用程序分发helm是一个C/S框架的软件,helm相当于一个客户端&…

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…

xtrabackup备份mysql5.7_【 xtrabackup】CentOS7.x上基于 MySQL 5.7.x的XtraBackup 安装与备份还原...

MySQL的XtraBackup 备份与恢复https://shockerli.net/post/xtrabackup-backup-recovery-mysqlPercona XtraBackup 备份原理与实践http://www.unixfbi.com/349.htmlXtraBackup备份恢复模拟实践https://blog.51cto.com/13178102/2151512Percona XtraBackup 安装介绍篇https://www…

数字有维度, 质数可追寻

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

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

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

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

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

mysql微服务查询问题_【mysql】微服务架构下跨服务查询的聚合有什么好的方案?...

微服务架构中,每个服务都有自己的独立数据库。然而现在有个需求,需要生成一张实时的报表,该报表包含两个服务的数据。如服务A,服务B。B中仅包含A的主键id作为关联。而此报表的搜索条件包含A服务实体中的字段也包含B服务实体中的字…

mnist数据集svm python_python支持向量机分类MNIST数据集

支持向量机在高维或无限维空间中构造超平面或超平面集合,其可以用于分类、回归或其他任务。直观来说,分类边界距离最近的训练数据点越远越好,因为这样可以缩小分类器的泛化误差。调用sklearn.svm的svc函数,将MNIST数据集进行分类&…

mysql触发器可以使用正则表达式_SQL 正则表达式及mybatis中使用正则表达式

这篇文章主要介绍了SQL 正则表达式及mybatis中使用正则表达式的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下mysql 提供的模式匹配的其他类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作…

python代码200行左右_200行Python代码实现2048

import cursesfrom random import randrange,chiocefrom collections import defaultdictactions[Up,Left,Down,Right,Restart,Exit]letter_codes[ord(ch) for ch in WASDRQwasdrq]action_dictdict(zip(letter_codes,actions*2))def main(stdscr):def init():#重置游戏棋盘game…