015——继承(来 , 看看Java中的继承关系)
目录
- 继承
- 继承概述、使用继承的好处
- 什么是继承
- 使用继承的好处
- 继承后子类的特点?
- 案例演示
- 继承的设计规范、内存运行原理
- 继承的设计规范
- 为什么
- 内存运行原理
- 继承的特点
- 子类是否可以继承父类的构造器?
- 子类是否可以继承父类的私有成员?
- 子类是否可以继承父类的静态成员?
- 继承的特点
- Object特点
- 继承后:成员变量、成员方法的访问特点
- 在子类方法中访问成员(成员变量、成员方法)满足:**就近原则**
- 如果子父类中,出现了**重名的成员**,会优先使用子类的,**此时如果一定要在子类中使用父类的怎么办?**
- 继承后:方法重写
- 方法重写的应用场景
- 案例
- @Override重写注解
- 方法重写注意事项和要求
- 总结
- 子类构造器的特点
- 为什么?
- 怎么调用父类构造器的?
- 执行结果
- 子类构造器访问父类有参构造器
- super调用父类有参数构造器的作用
- 如果父类中没有无参数构造器,只有有参构造器,会出现什么现象呢?
- 错误提示
- 如何解决?
- this、super使用总结
- this和super详情
- this(...)和super(…)使用注意点:
- 案例演示
继承
继承概述、使用继承的好处
什么是继承
- 继承就是java允许我们用extends关键字,让一个类和另一个类建立起一种父子关系。
- Java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起父子关系。
public class Student extends People {}
- Student称为子类(派生类),People称为父类(基类 或超类)。
- 作用:当子类继承父类后,就可以直接使用父类公共的属性和方法了
使用继承的好处
- 可以提高代码的复用性。
- 提高代码复用性,减少代码冗余,增强类的功能扩展性。
继承后子类的特点?
子类 继承父类,子类可以得到父类的属性和行为,子类可以使用。
Java中子类更强大
案例演示
继承的设计规范、内存运行原理
继承的设计规范
- 子类们相同特征(共性属性,共性方法)放在父类中定义
- 子类独有的的属性和行为应该定义在子类自己里面。
为什么
- 如果子类的独有属性、行为定义在父类中,会导致其它子类也会得到这些属性和行为,这不符合面向对象逻辑。
内存运行原理
继承的特点
子类可以继承父类的属性和行为,但是子类不能继承父类的构造器。
Java是单继承模式:一个类只能继承一个直接父类。
Java不支持多继承、但是支持多层继承。
Java中所有的类都是Object类的子类。
子类是否可以继承父类的构造器?
- 不可以的,子类有自己的构造器,父类构造器用于初始化父类对象
子类是否可以继承父类的私有成员?
可以的,只是不能直接访问。
例如 :就像你从别人那里继承了一个保险柜的密码 , 但是你给密码忘记了 , 但是那个密码的地址一直在你的脑海中保存 , 只不过你个忘记罢了
子类是否可以继承父类的静态成员?
- 个人认为:子类不能继承父类的静态成员。(共享并非继承)
- 只能共享
这个是通过类去访问的,并非通过对象 , 所以只能说是共享
继承的特点
Object特点
继承后:成员变量、成员方法的访问特点
在子类方法中访问成员(成员变量、成员方法)满足:就近原则
先子类局部范围找
然后子类成员范围找
然后父类成员范围找,如果父类范围还没有找到则报错。
如果子父类中,出现了重名的成员,会优先使用子类的,此时如果一定要在子类中使用父类的怎么办?
- 可以通过super关键字,指定访问父类的成员。
继承后:方法重写
- 在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法。
方法重写的应用场景
当子类需要父类的功能,但父类的该功能不完全满足自己的需求时。
子类可以重写父类中的方法。
案例
package com.north.d9_extends_override;/*** @author North* @date 2022/10/8 19:53*/
public class Test {public static void main(String[] args) {// 目标 : 理解方法重写NewPhone oppo = new NewPhone();oppo.call();System.out.println("------------------------------");oppo.sendMessage();}
}class Phone {public void call() {System.out.println("打电话");}public void sendMessage() {System.out.println("发短信");}
}class NewPhone extends Phone {@Overridepublic void call() {super.call();System.out.println("打视频电话");}@Overridepublic void sendMessage() {super.sendMessage();System.out.println("发一些有趣的图片");}
}
@Override重写注解
@Override是放在重写后的方法上,作为重写是否正确的校验注解。
加上该注解后如果重写错误,编译阶段会出现错误提示。
建议重写方法都加@Override注解,代码安全,优雅!
方法重写注意事项和要求
- 重写方法的名称、形参列表必须与被重写方法的名称和参数列表一致。
- 私有方法不能被重写。
- 子类重写父类方法时,访问权限必须大于或者等于父类 (暂时了解 :缺省 < protected < public)
- 子类不能重写父类的静态方法,如果重写会报错的。
总结
子类构造器的特点
为什么?
子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据。
子类初始化之前,一定要调用父类构造器先完成父类数据空间的初始化。
怎么调用父类构造器的?
执行结果
子类构造器访问父类有参构造器
super调用父类有参数构造器的作用
如果父类中没有无参数构造器,只有有参构造器,会出现什么现象呢?
错误提示
如何解决?
this、super使用总结
this和super详情
this(…)和super(…)使用注意点:
子类通过 this (…)去调用本类的其他构造器,本类其他构造器会通过 super 去手动调用父类的构造器,最终还是会调用父类构造器的。
注意:this(…) super(…) 都只能放在构造器的第一行,所以二者不能共存在同一个构造器中。
案例演示
/**使用 this()如果学生不填写学校 , 默认这个对象的学校名称*/public Student(String name) {// this() 借用本类兄弟的构造器this(name , "山崖书院");}public Student(String name, String schoolName) {this.name = name;this.schoolName = schoolName;}```
015——继承(来 , 看看Java中的继承关系)相关推荐
- java 的继承_关于java中的继承
我们都知道Java中的继承是复用代码.扩展子类的一种方式,继承使得Java中重复的代码能够被提取出来供子类共用,对于Java程序的性能以及修改和扩展有很大的意义,所以这是一个非常重要的知识点. 那么对 ...
- java中抽象类继承抽象类_用Java中的抽象类扩展抽象类
java中抽象类继承抽象类 示例问题 当我创建Java :: Geci抽象类AbstractFieldsGenerator和AbstractFilteredFieldsGenerator我遇到了一个不 ...
- java中抽象类继承抽象类_Java中的抽象类用示例解释
java中抽象类继承抽象类 Abstract classes are classes declared with abstract. They can be subclassed or extende ...
- java继承总结_JAVA笔记:Java中的继承总结
继承:在Java中使用extends关键字来实现类的继承 ,extends意思就是派生,所以子类也叫派生类,继承的主要目的是扩展类的内容 操作格式: class A{}; class B exten ...
- java中的继承(一)
在java中,所有的类都有一个默认的父类Object,即使我们没有显式的去继承这个类.在Object类中定义了一些方法,其中有几个方法是我们必须掌握的,比如equals方法,hashCode方法,wa ...
- Java中 利用继承的思想实现动物的分类,将动物分为水生动物和陆生动物,有其动物的属性和特征,又有其属性和特征,编程模拟。
Java中 利用继承的思想实现动物的分类,将动物分为水生动物和陆生动物,有其动物的属性和特征,又有其属性和特征,编程模拟. 前言 动物在拥有自己本身所具有的特征的同时,还应该具有所在大类所具有的动物特 ...
- Java中的继承 与 多态(中)
先导: 我们在<Java中的继承 与 多态(上)>当中讲解了如下几个问题, 1.继承是什么 2.super关键字 3.特殊考点-父子类中不同代码块的实现顺序 所以现在我们对于继承 ...
- 解析java中的继承
解析java中的继承 1 含义 在符合当代社会的约定俗成的逻辑的情况下,很多类具有相同的属性和方法,我们这些共有的属性和方法抽象成一个类后,通过extends关键字使得很多类与抽象成的类建立父子关系, ...
- 利用JAVA中关于继承的相关知识求得圆柱体体积并输出
利用JAVA中关于继承的相关知识求得圆柱体体积并输出 Write a program: 1)Define a Circle class and a Cylinder class, which is d ...
最新文章
- 用dedecms自定义表单创建简易自助预约系统
- ElasticSearch探索之路(五)集群与分片:选举、动态更新、近实时搜索、事务日志、段合并
- 楼兰图腾(权值线段树)
- Sharepoint Designer 2007 Workflow
- iframe标签里面的页面元素只读
- 微信小程序代码大全 - 小程序开发福利
- eigen求特征值和特征向量
- 基于Android Tv制作一个Tv桌面(三)
- 事业单位考试计算机专业知识题库,计算机考试题库:计算机考试模拟练习题(201)...
- 逆势获投1亿,火眼金睛下的云适配BRaaS新模式引关注
- 用python画盒图_[519]matplotlib(四)|Python中用matplotlib绘制盒状图(Boxplots)和小提琴图(Violinplots)...
- 1.PCIe扫盲——PCIe简介
- 电信10兆指的是多少Mbps
- 数据结构——图-基本知识点(第七章)
- wafw00f--一款基于python识别网站WAF的工具
- CreateCompatibleDC CreateCompatibleBitmap SelectObject详解
- 【找规律】codeforces 710 F
- 22款受欢迎的计算机取证工具
- 微信公众号被动消息回复实现
- java 字节 字符
热门文章
- 【奖池启用禁用】测试场景(一)
- spring无法使用@PostConstruct、@PreDestory、@Resource注解
- 小觅双目摄像头固件升级失败的解决办法
- 以颐和园为例,简单操作生成一个导游应用
- java 弹力球_pygame实现弹力球及其变速效果
- 绘图杂记【8】echarts象形图,圆环图
- 【预测模型-ElM分类】基于松鼠算法优化ElM神经网络实现数据分类附matlab代码
- 【深度学习笔记】cs231n neural networks 3
- 凯立德2014秋季机车版C1204-C7K05-3323J0L懒人包 (5.0版)
- 数据分析师,到底要懂多少业务?