Java 继承02
向上类型转换
父类型的引用指向子类型的实例。
Person p = new Person();
Animal a = p; //子类对象赋值给父类类型的变量
注意:
向上转型后,子类单独定义的方法会丢失。
如果子类中重写了父类的方法,那么调用这个方法的时候,将会调用子类中的方法。
意义:
减少重复代码。
实例化的时候可以根据不同的需求实例化不同的的对象,实现参数统一化。
总结:
1.假设A为基类,B为子类
B b = new B();
A a = b;
a.play(); //A,B中都定义了play()方法,即子类重写(覆写)了该方法
分析:
# 为什么父类型的引用可以指向子类型的对象?
自动实现向上转型。通过A a = b;语句,编译器自动将子类对象向上移动,成为A类型。
# a.play()将执行子类还是父类中定义的方法?
子类的。在运行时期,将根据a这个引用所指向的实际对象来获取相应的方法,这也是多态性。一个父类的引用,指向不同的子类对象,执行该方法时,将表现出不同的行为。
2.不能将子类引用指向父类对象
A a = new A();
B b = a; //这样是不行的,对比前面,可以知道父类不是子类(如同人不是男人)
在java中,向上转型是自动进行的,但是向下转型却不是,需要我们强制进行类型转换。如:
B b = new B();
A a = b;
B bb = (B)a; //进行强制类型转换,也就是向下转型
final修饰
final修饰类,表示该类不能被继承;
final修饰非final类中的方法,表示该方法在子类中不能被重写。
Java中的动态绑定和静态绑定
https://www.jb51.net/article/161540.htm
https://www.cnblogs.com/xyz-star/p/10152676.html
绑定:
把一个方法 与其所在的 类/对象 关联起来,叫做方法的绑定。
绑定分为:
静态绑定(前期绑定):程序运行前就已经知道方法是属于哪个类的。
动态绑定(后期绑定):在程序运行的过程中,根据具体的实例对象才能具体确定是哪个方法。
静态绑定:
java当中的方法只有final、static、private修饰的的方法和构造方法是静态绑定的。
静态属性和静态方法能否被继承,能否重写
静态方法和属性:调用 类名.方法名完成的
如果子类里面定义了和父类声明一样的静态方法和属性,那么这时候父类的静态方法或属性称之为“隐藏”。
多态之所以能够实现是依赖于继承和重写 、重载(继承和重写最为关键)。
有了继承和重写就可以 实现父类的引用可以指向不同子类的对象。
重写的功能是:“重写”后子类的优先级要高于父类的优先级,但是“隐藏”是没有这个优先级之分的。
结论:静态属性、静态方法和非静态的属性都可以被继承和隐藏而不能够被重写,因此不能实现多态,不能实现父类的引用可以指向不同子类的对象。
非静态的方法可以被继承和重写,因此可以实现多态。
继承的优缺点
在面向对象语言中,继承是必不可少的、非常优秀的语言机制,它有如下优点:
实现代码共享,减少创建类的工作量,使子类可以拥有父类的方法和属性。
提高代码维护性和可重用性。
提高代码的可扩展性,更好的实现父类的方法。
自然界的所有事物都是优点和缺点并存的,继承的缺点如下:
继承是侵入性的。只要继承,就必须拥有父类的属性和方法。
降低代码灵活性。子类拥有父类的属性和方法后多了些约束。
增强代码耦合性(开发项目的原则为高内聚低耦合)。当父类的常量、变量和方法被修改时,需要考虑子类的修改,有可能会导致大段的代码需要重构。
Java 继承02的更多相关文章
- 111 01 Android 零基础入门 02 Java面向对象 04 Java继承(上)02 继承的实现 01 继承的实现
111 01 Android 零基础入门 02 Java面向对象 04 Java继承(上)02 继承的实现 01 继承的实现 本文知识点: 继承的实现 说明:因为时间紧张,本人写博客过程中只是对知识点 ...
- 087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点
087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点 本文知识点:封装的概念和特点 说明:因为时间紧张,本人写博客过程中只是对 ...
- Java继承与组合
Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...
- JAVA继承时构造函数的问题
今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了. 下面是我个人的总结: 先创建一个父类,里面有两个构造函数: public class Jisuan ...
- Java继承和接口
接口最关键的作用,也是使用接口最重要的一个原因:能上溯造型至多个基础类.使用接口的第二个原因与使用抽象基础类的原因是一样的:防止客户程序员制作这个类的一个对象,以及规定它仅仅是一个接口.这样便带来了一 ...
- Java继承的初始化
/** * Created by xfyou on 2016/11/2. * Java继承的初始化 */ public class Beetle extends Insect { int k = pr ...
- Java—继承、封装、抽象、多态
类.对象和包 1) 面向对象编程(Object Oriented Programming ,简称 OOP):20世纪70年代以后开始流行. 2) 结构化编程与面向对象编程的区别: A. 在结构化编程中 ...
- java继承关系中成员变量,构造方法,成员方法的关系
Java继承中的成员关系 A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单写那个名字就访问那个名字! b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢? 子 ...
- JAVA继承时this和super关键字
JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父 ...
随机推荐
- 【剑指Offer】最小的K个数 解题报告(Python)
[剑指Offer]最小的K个数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...
- P1547逆转,然后再见
描述 上届的高三在这个暑假终于要到各个城市奔向他们的大学生活了.奇怪的是学校这次异常阔气,说要用三台车子去载他们上学.上届高三的师兄们异常兴奋--可惜的是临行的时候,学校终于露出它"狰狞&q ...
- select......for update会锁表还是锁行
select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁. 那么它加的是行锁还是表锁,这就要看是不是用了索引/主键. 没用索 ...
- BUG 记录:移位运算与扩展欧几里得算法
BUG 记录:移位运算与扩展欧几里得算法 起因 上个月就开始打算用C++写一个ECC的轮子(为什么?折磨自己呗!),奈何自己水平有点差,拖到现在才算写完底层的大数运算.在实现欧几里得算法的时候,我开始 ...
- vue中使用JSX报错,如何解决
Support for the experimental syntax 'jsx' isn't currently enabled (32:12): 30 | }, 31 | render() { & ...
- 「MySql高级查询与编程」练习:企业员工管理
题目:企业员工管理 一.语言和环境 1.实现语言:SQL. 2.开发环境:MySQL,navicat for mysql. 二.题目(100分): 1.创建数据库及数据表: (1)创建数据库,名称为d ...
- HTML5 纯CSS3实现正方体旋转3D效果
实现效果: 实现代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...
- 你在寻找Vue3移动端项目框架嘛?请看这里
现在web开发变得更加美妙高效,在于开发工具设计得更好了,丰富性与易用性,都有所提高.丰富性带来了一个幸福的烦恼,就是针对实际应用场景,如何选择工具 ? 1. Vue Cli和Vite之间的选择 Vi ...
- Redis缓存安装Version5.0.7
1.说明 Redis是一个开源(BSD许可)的, 内存中的数据结构存储系统, 它可以用作数据库.缓存和消息中间件. 这里介绍在Linux下使用源码编译安装的方式. 2.下载 官方下载地址:https: ...
- CAP原理详解
转载 https://blog.csdn.net/u013332124/article/details/82874178 文章目录 一.CAP原理介绍 对CAP原理的一些常见的理解误区 二.CAP原理 ...