JAVASE的全面总结
(未完待续)
五、子类与继承
5.1 子类与父类
继承是一种由已有的类创建新类的机制。利用继承,我们可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。由继承而得到的类称为子类,被继承的类称为父类(超类)。
Java不支持多重继承(子类只能有一个父类)。
5.1.1 声明子类
使用关键字extends来定义一个类的子类,格式如下:
class 子类名 extends 父类名 {
…
}
例如:
class Student extends People {
…
}
说明:把Student类定义为People类的子类、People类是Student类的父类
5.1.2 类的树形结构
Java的类按继承关系形成树形结构这个树形结构中,根节点是Object类(Object是java.lang包中的类),即Object是所有类的祖先类。
除了Object类,每个类都有且仅有一个父类,一个类可以有多个或零个子类。如果一个类(除了Object类)的声明中没有使用extends关键字,这个类被系统默认为是Object的子类,即类声明“class A”与“class A extends Object”是等同的。
5.2 子类的继承性
类可以有两种重要的成员:成员变量和方法。子类的成员中有一部分是子类自己声明定义的,另一部分是从它的父类继承的。
所谓子类继承父类的成员变量就是把继承来的变量作为自己的一个成员变量,就好象它们是在子类中直接声明一样,可以被子类中自己定义的任何实例方法操作。
所谓子类继承父类的方法就是把继承来的方法作为子类中的一个方法,就好象它们是在子类中直接定义了一样,可以被子类中自己定义的任何实例方法调用。
class Father{float weight,height;String head;void speak(String s){System.out.println(s)}}class Son extends Father{String head,foot;}Son s = new Son();
5.2.1 子类和父类在同一包中的继承性
如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法,继承的成员变量或方法的访问权限保持不变。
下面的例子1中有4个类:People,Student.java,UniverStudent.java和Example5_1,这些类都没有包名(需要分别打开文本编辑器编写、保存这些类的源文件,比如保存到C:\ch5目录中),其中UniverStudent类是Student的子类,Student是People的子类。程序运行效果如图5.1。
package Example5_1;public class People {int age,leg = 2,head = 2;protected void showPeopleMess(){System.out.printf("%d岁,%d腿,%d头",age,leg,head);}
}
package Example5_1;public class Student extends People{int number;public void tellNumber(){System.out.printf("%d\t",number);}int add(int x,int y){return x+y;}
}
package Example5_1;
public class University extends Student{int multi(int x,int y){return x*y;}
}
package Example5_1;
public class Example5_1 {public static void main(String args[]){Student zhang = new Student();zhang.age = 21;zhang.head = 1;zhang.leg = 2;zhang.number = 1312;zhang.tellNumber();University kong = new University();kong.age = 22;kong.head = 1;kong.leg = 2;kong.number = 1314;System.out.println("kong可以做加法运算"+kong.add(10,2));System.out.println("kong可以做乘法"+kong.multi(10,2));}}
5.2.2 子类和父类不在同一包中的继承性
如果子类和父类不在同一个包中,那么,子类继承了父类的protected、public成员变量做为子类的成员变量,并且继承了父类的protected、public方法为子类的方法,继承的成员或方法的访问权限保持不变。
5.2.3 继承关系(GENERALIZATION)的UML图
如果一个类是另一个类的子类,那么UML通过使用一个实线连接两个类的UML图来表示二者之间的继承关系,实线的起始端是子类的UML图,终点端是父类的UML图,但终点端使用一个空心的三角形表示实线的结束。
5.3 子类与对象
类继承了父类的很多东西,那么子类在创建对象的时候,他又是怎么生成自己的对象的呢。子类生产的对象会有哪些东西呢。
//例题:子类的继承
class Father
{ float weight,height;String head;void speak(String s){ System.out.println(s);}
}
class Son extends Father
{ String hand,foot;
}Son s=new Son();
5.3.1 子类对象的生成
子类创建对象时,子类的构造方法总是先调用父类的某个构造方法,完成父类部分的创建;然后再调用子类自己的构造方法,完成子类部分的创建。如果子类的构造方法没有明显地指明使用父类的哪个构造方法,子类就调用父类的不带参数的构造方法 。
子类在创建一个子类对象时,不仅子类中声明的成员变量被分配了内存,而且父类的所有的成员变量也都分配了内存空间,但子类只能操作继承的那部分成员变量 。
子类可以通过继承的方法来操作子类未继承的变量和方法 .
例子2中,子类ChinaPeople的对象调用继承的方法操作未被子类继承却分配了内存空间的变量。程序运行效果如图5.3。
package Example5_2;
class People{private int averHeight = 166;public int getAverHeight(){return averHeight;}
}
class ChinaPeople extends People{int height;void setHeight(int h){height = h;}public int getheight(){return height;}
}
public class EXample5_2 {public static void main(String args[]){ChinaPeople zhangsan = new ChinaPeople();System.out.println("子类未继承的averHeight是"+zhangsan.getAverHeight());zhangsan.setHeight(20);System.out.println("子类的实例变量的值是"+zhangsan.height);System.out.println("子类的实例变量的值是"+zhangsan.getheight());}}
结论
1)创建子类对象时,子类总是按层次结构从上到下的顺序调用所有超类的构造函数。
2)如果父类没有不带参数的构造方法,则在子类的构造方法中必须明确的告诉调用父类的某个带参数的构造方法,通过super关键字,这条语句还必须出现在构造方法的第一句。
5.3.2 关于INSTANCEOF运算符
instanceof运算符是Java独有的双目运算符,其左面的操作元是对象,右面的操作元是类,当左面的操作元是右面的类或其子类所创建的对象时,instanceof运算的结果是true,否则是false 。请看例题。
class Test
{ String s; Test(){ stu s=new String(); if(s instanceof String){ System.out.println(“YES”);}}
}
5.4 成员变量的隐藏和方法重写
5.4.1 成员变量的隐藏
对于子类可以从父类继承的成员变量,只要子类中声明的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量。
在子类中要操作这个与父类同名的成员变量时,子类操作的是子类重新声明的这个成员变量。而不是被隐藏掉的。,
例子3(Example5_3.java)中,Goods类有一个名字为weight的double型成员变量,本来子类CheapGoods可以继承这个成员变量,但是子类CheapGoods又重新声明了一个int型的名字为weight的成员变量.程序运行效果如图5.4
package Example5_3;public class Goods {public double weight;public void oldSetweight(double w){weight = w;System.out.println("double型的weight="+weight);}public double getWeight(){return weight;}public double oldGetprice(){double price = weight * 10;return price;}
}
package Example5_3;public class CheapGoods extends Goods{public int weight;public void newSetweight(int w){weight = w;System.out.println("int型的weight是"+weight);}public double newGetPrice(){double price = weight * 10;return price;}
}
package Example5_3;public class Example5_3 {public static void main(String args[]){CheapGoods cheapgoods = new CheapGoods();cheapgoods.newSetweight(198);System.out.println("对象cheapgoods的weight的值是:"+cheapgoods.weight);System.out.println("对象cheapgoods的价格是:"+cheapgoods.newGetPrice());cheapgoods.oldSetweight(100.74);//利用子类对象调用继承的方法操作隐藏的double型变量weightSystem.out.println("使用老的方法计算出的价格是:"+cheapgoods.oldGetprice());}
}
5.4.2 方法重写(OVERRIDE)
同样,子类通过重写可以隐藏已继承的实例方法。
1.重写的语法规则 如果子类继承了父类的实例方法,那么子类就有权利重写这个方法。 方法重写是指:子类中定义一个方法,这个方法的类型和父类的方法的类型一致或是父类方法的类型的子类型,且这个方法的名字、参数个数、参数的类型和父类的方法完全相同.
2.重写的目的 子类通过方法的重写可以隐藏继承的方法,子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。
3. 重写后方法的调用 子类创建的一个对象,如果子类重写了父类的方法,则运行时系统调用的是子类重写的方法; 子类创建的一个对象,如果子类未重写父类的方法,则运行时系统调用的是子类继承的方法;
4.重写的注意事项 重写父类的方法时,不允许降低方法的访问权限,但可以提高访问权限(访问限制修饰符按访问权限从高到低的排列顺序是:public、protected、友好的、private。)
package EXample5_4;
public class University {void enterRule(double math,double chinese,double english){double avrScore = (math + chinese + english)/3;if(avrScore >= 60){System.out.println(avrScore+"达到相应的要求");}else System.out.println(avrScore+"未达到相应的要求");}
}
package EXample5_4;public class ImportantUniversity {public void enterrule(double math,double chinese,double english){double avrScore =(math + chinese + english)/3;if(avrScore >= 73) System.out.println(avrScore+"通过了重点大学的录取的分数线");else System.out.println(avrScore+"未通过重点大学的录取的分数线");}
}
package EXample5_4;public class Example5_4 {public static void main(String args[]){ImportantUniversity zhangsan = new ImportantUniversity();zhangsan.enterrule(50,100,120);}
}
相关文章:
JAVASE的全面总结
(未完待续) 五、子类与继承 5.1 子类与父类 继承是一种由已有的类创建新类的机制。利用继承,我们可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并…...
关于repeater录制的流量子调用的identity中带有~S的情况
前段时间同事问我,我们录制的流量中,尤其是dubbo的子调用显示经常他的末尾会带上一个小尾巴这个是什么意思呢,其实之前我没有太在意这个事情,只是同事这么疑问了,确实激起了好奇心,所以就差了下 到底是什么…...
Java面试题队列
Java中的队列都有哪些,有什么区别 1. ArrayDeque, (数组双端队列) 2. PriorityQueue, (优先级队列) 3. ConcurrentLinkedQueue, (基于链表的并发队列) 4. DelayQueue, (延期…...
大型Saas系统的权限体系设计(二)
X0 上期回顾 上文《大型Saas系统的权限体系设计(一)》提到2B的Saas系统的多层次权限体系设计的难题,即平台、平台的客户、客户的客户,乃至客户的客户的客户如何授权,这个可以通过“权限-角色-岗位”三级结构来实现。 但这个只是功能权限&am…...
HTML(四) -- 多媒体设计
目录 1. 视频标签 2. 音频标签 3. 资源标签(定义媒介资源 ) 1. 视频标签 属性值描述autoplayautoplay如果出现该属性,则视频在就绪后马上播放。controlscontrols表示添加标准的视频控制界面,包括播放、暂停、快进、音量等…...
设置苹果电脑vsode在新窗口中打开文件
0、前言 最近切换到mac电脑工作,又得重新安装一些工具软件并设置。虽然这些设置并表示啥复杂的设置,但是久了不设置还是会忘记。于是记录之,也希望给能帮助到需要的人。 我们使用vscode阅读或者编辑文件时,有时候希望同时打开多…...
第二章创建模式—单例设计模式
文章目录 单例模式的结构如何控制只有一个对象呢怎么设计这个类的内部对象外部怎么访问 单例模式的主要有以下角色 单例模式的实现饿汉式 1:静态变量饿汉式 2:静态代码块懒汉式 1:线程不安全懒汉式 2:线程安全—方法级上锁懒汉式 …...
数据结构学习记录——堆的插入(堆的结构类型定义、最大堆的创建、堆的插入:堆的插入的三种情况、哨兵元素)
目录 堆的结构类型定义 最大堆的创建 堆的插入 堆的插入的三种情况 代码实现 哨兵元素 堆的结构类型定义 #define ElementType int typedef struct HNode* Heap; /* 堆的类型定义 */ struct HNode {ElementType* Data; /* 存储元素的数组 */int Size; /* 堆中…...
netperf测试
netperf测试 目录 批量网络流量性能测试 TCP_STREAM测试UDP_STREAM 测试请求/应答网络流量测试 TCP_RR TCP_CRR Netperf 是一个网络性能测试工具,它可以测试网络协议栈的性能,例如TCP和UDP协议。Netperf可以测量网络吞吐量、延迟和CPU利用率等指标。…...
ORACLE常用语句
1.修改用户密码 alter user 用户名 identified by 新密码; 2.表空间扩容 1.增加数据文件 alter tablespace AA add datafile ‘DATA’ size 20G autoextend off; 2.修改数据文件大小 ALTER DATABASE DATAFILE ‘E:\ORACLE\PRODUCT\10.2.0\ORADATA\aa\aa.DBF’ RESIZE 400M;…...
[论文笔记]C^3F,MCNN:图片人群计数模型
(万能代码)CommissarMa/Crowd_counting_from_scratch 代码:https://github.com/CommissarMa/Crowd_counting_from_scratch (万能代码)C^3 Framework开源人群计数框架 科普中文博文:https://zhuanlan.zhihu.com/p/65650998 框架网址:https…...
HCIP-7.2VLAN间通信单臂、多臂、三层交换方式学习
VLAN间通信单臂、多臂、三层交换方式学习 1、单臂路由2、多臂路由3、三层交换机的SVI接口实现VLAN间通讯3.1、VLANIF虚拟接口3.2、VLAN间路由3.2.1、单台三层路由VLAN间通信,在一台三层交换机内部VLAN之间直连。3.2.2、两台三层交换机的之间的VLAN通信。3.2.3、将物…...
PHP快速入门17-用spl_autoload_register实现类的自动加载
文章目录 前言实现过程创建两个类创建入口文件 总结 前言 本文已收录于PHP全栈系列专栏:PHP快速入门与实战 PHP类自动载入是指在PHP应用程序中,当需要使用某个类文件时,系统会自动加载该类文件,无需手动引入。 在PHP中…...
【黑马程序员 C++教程从0到1入门编程】【笔记8】 泛型编程——模板
https://www.bilibili.com/video/BV1et411b73Z?p167 C泛型编程是一种编程范式,它的核心思想是编写通用的代码,使得代码可以适用于多种不同的数据类型。 而模板是C中实现泛型编程的一种机制,它允许我们编写通用的代码模板,然后在需…...
分享10个精美可视化模板,解决95%的大屏需求!
前段时间和朋友一起喝茶,我吐槽着excel表格做报表的繁琐,他惊讶的问我竟然不知道大屏模板这种东西,说是直接套用数据就可以,我震惊的同时吃下了这个安利。 回来之后,我好好研究了一番这个叫可视化大屏的“新鲜玩意儿”…...
好用的项目管理软件的具体功能有哪些
随着企业规模不断的扩大,项目管理往往会面临更多的挑战与难题,最常见的会出现以下几个问题:资源消耗失控,而项目部门和相关部门之间沟通越来越困难;团队凝聚力下降、项目进度难以把控,项目成本几乎失控&…...
< 每日小技巧: 基于Vue状态的过渡动画 - Transition 和 TransitionGroup>
》基于Vue状态的过渡动画 - Transition 和 TransitionGroup 👉 一、Vue Transition 简介> Transition 和 TransitionGroup 之间的区别 👉 二、<Transition> 组件> 触发 <Transition> 组件的场景:> 基于 CSS 的过渡效果&…...
vmware安装redhat 8
vmware安装redhat 8 1、下载镜像文件1.1 镜像文件 2、安装系统2.1、选择自定义安装2.2、兼容性选择2.3、选择镜像文件导入2.4、设置用户名密码2.5、选择虚拟机在磁盘上的位置2.6、选择处理器数量2.7、选择内存大小2.8、选择桥接或NAT2.9、选择SCSI控制器类型2.10、选择虚拟机磁…...
OpenCV C++案例实战三十一《动态时钟》
OpenCV C案例实战三十一《动态时钟》 前言一、绘制表盘二、绘制刻线三、获取系统时间四、结果展示五、源码总结 前言 本案例将使用OpenCV C实现动态时钟效果。原理也很简单,主要分为绘制表盘、以及获取系统时间两步。 一、绘制表盘 首先为了效果显示美观一点&…...
字节后端入门 - Go 语言原理与实践
1.1什么是Go语言 1.2Go语言入门 环境 1.3基础语法 1.3.1变量 var name"value" 自己推断变量类型; 也可以显式类型 var c int 1 name: type(value) 常量: const name "value" g : a"foo" 字符串拼接 1.3.2 if else {}花括号…...
锂电材料浆料匀浆搅拌设备轴承经常故障如何处理?
锂电材料浆料匀浆搅拌设备是锂电池生产中重要的设备之一,用于将活性材料、导电剂、粘结剂和溶剂混合成均匀的浆料,是电极制备过程中不可或缺的步骤。然而,由于高速搅拌和化学腐蚀等因素的影响,轴承经常会出现故障,导致…...
设计模式——设计模式介绍和单例设计模式
导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线设计模式牛客面试题 目录 一、设计模式概述和分类 1.1 设计模式介绍 1.2 设计模式分类 二、创建型设计模式-单例模式 2.1 介绍 2.2 八种单例模式的创…...
利用Iptables构建虚拟路由器
利用Iptables构建虚拟路由器 (1)修改网络类型 在VMware Workstation软件中选择“编辑→虚拟网络编辑器”菜单命令,在虚拟网络列表中选中VMnet1,将其配置为“仅主机模式(在专用网络内连接虚拟机)”&#x…...
C++——类和对象[中]
0.关注博主有更多知识 C知识合集 目录 1.类的默认成员函数 2.构造函数和析构函数基础 3.构造函数进阶 4.析构函数进阶 5.拷贝构造函数 6.运算符重载 7.日期类 7.1输入&输出&友元函数 8.赋值运算符重载 9.const成员函数 9.1日期类完整代码 10.取地址重载 …...
Symbol.iterator和Symbol.asyncIterator
Symbol是什么? symbol是ES6标准中新增的一种基本数据类型,symbol 的值是通过 Symbol()函数返回的,每一个 symbol 的值都是唯一的,即使传入相同的描述值。 注:Symbol 函数不允许通过 new 的方式调用 Symbol的作用是什…...
忆暖行动|“他一个人推着老式自行车在厚雪堆的道路上走,车上带着学生考试要用的司机”
忆暖行动|“他一个人推着老式自行车在厚雪堆的道路上走,车上带着学生考试要用的sj” 一头白发,满山青葱 在那斑驳的物件褶皱中,透过泛黄的相片,掩藏着岁月的冲刷和青葱的时光。曾经的青年早已经不复年轻,但是那份热爱…...
Python中True、False、None的判断(避坑)
2.4 Python中True、False、None的判断 在Python中,所有的空值和0在作为条件表达式时,隐式的进行bool转换后都是False,比如:空列表:[]、空字符串:‘’、空字典:{}等等。 from icecream import …...
Spring Bean定义有哪些方式?
概述 对于学习Spring的兄弟姐妹来说,觉得这个问题很熟悉,若是要把它回答得很清楚,却是很为难?平时写代码的时候,不会在意这些概念问题,但面试时这个问题出现的频率却是很高,所以还是必须要掌握…...
JVM内存模型的演变
1,背景 class文件、类的加载过程。我们的class文件就要进入到JVM内存里,我们沿着经典的JDK1.6,JDK1.7,JDK1.8看看在其中都经历了哪些改变 概念的统一: 方法区: 方法区可以看作是JVM逻辑上管理一片区域的…...
DataX3同步Mysql数据库数据到Mysql数据库和DataX3同步mysql数据库数据到Starrocks数据库
DataX3同步Mysql数据库数据到Mysql数据库和DataX3同步mysql数据库数据到Starrocks 一、认识DataX二、DataX3概览三、DataX3框架设计四、DataX3插件体系五、DataX3核心架构六、DataX 3六大核心优势1.可靠的数据质量监控2.丰富的数据转换功能3.精准的速度控制4.强劲的同步性能5.健…...
wordpress5.2 icp备案号/网络营销策略包括哪几大策略
文章目录高度相关的几个基本概念RTKLIB中高度设置与计算参考文献由于在GNSS定位中由多种高度表示,不同的高度概念很容易混淆,中英文对应有时候也容易搞混。因此整理了一下常用的两种高度——椭球高、正高的概念与计算,并且标注了对应的英文&a…...
phpwind做的网站/广告投放
手机CPU天梯图3月版在上一期的“手机CPU怎么看好坏 手机CPU天梯图2019年2月最新版”中,我们为大家聊了如何去判断一看处理器性能,大致最核心的主要是架构、主频、核心、基带、功耗等方面,今天就不再介绍一些参数部分了。以下是手机CPU天梯图2…...
phpcms仿站教程/网站优化是什么意思
css有两大特性:继承性和层叠性 继承性: 面向对象语言都会存在继承的概念,在面向对象语言中,继承的特点:继承了父类的属性和方法。那么我们现在主要研究css,css就是在设置属性的。不会牵扯到方法的层面。 继…...
企业网站建设及前期准备/百度题库
这里是吧容器的本地日志目录挂载filebeat,然后filebeat 读取日志写入到kafka --- apiVersion: v1 kind: ConfigMap metadata:name: filebeat-confignamespace: kube-systemlabels:k8s-app: filebeat data:filebeat.yml: |-filebeat.inputs:- type: logpaths:- /var/lib/docke…...
网站改版 需求文档/网络营销模式有哪些
最近在知乎上看见有人设置了vscode编辑器的背景图片,觉得很新鲜,就尝试以一下,倒是成功了。首先在vscode扩展中,找到background这个插件,快捷键Ctrlshiftx (推荐学习:vscode入门教程)完成第一步就已经有默认…...
最高级网站建设/百度企业官网
albert1017Linux下压缩某个文件夹(文件夹打包) tar -zcvf /home/xahot.tar.gz /xahottar -zcvf 打包后生成的文件名全路径 要打包的目录例子:把/xahot文件夹打包后生成一个/home/xahot.tar.gz的文件。 # tar -xf all.tar 这条命令是解出all.t…...