向上类型转换

  父类型的引用指向子类型的实例。

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的更多相关文章

  1. 111 01 Android 零基础入门 02 Java面向对象 04 Java继承(上)02 继承的实现 01 继承的实现

    111 01 Android 零基础入门 02 Java面向对象 04 Java继承(上)02 继承的实现 01 继承的实现 本文知识点: 继承的实现 说明:因为时间紧张,本人写博客过程中只是对知识点 ...

  2. 087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点

    087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点 本文知识点:封装的概念和特点 说明:因为时间紧张,本人写博客过程中只是对 ...

  3. Java继承与组合

    Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...

  4. JAVA继承时构造函数的问题

    今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了. 下面是我个人的总结: 先创建一个父类,里面有两个构造函数: public class Jisuan ...

  5. Java继承和接口

    接口最关键的作用,也是使用接口最重要的一个原因:能上溯造型至多个基础类.使用接口的第二个原因与使用抽象基础类的原因是一样的:防止客户程序员制作这个类的一个对象,以及规定它仅仅是一个接口.这样便带来了一 ...

  6. Java继承的初始化

    /** * Created by xfyou on 2016/11/2. * Java继承的初始化 */ public class Beetle extends Insect { int k = pr ...

  7. Java—继承、封装、抽象、多态

    类.对象和包 1) 面向对象编程(Object Oriented Programming ,简称 OOP):20世纪70年代以后开始流行. 2) 结构化编程与面向对象编程的区别: A. 在结构化编程中 ...

  8. java继承关系中成员变量,构造方法,成员方法的关系

    Java继承中的成员关系 A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单写那个名字就访问那个名字! b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢? 子 ...

  9. JAVA继承时this和super关键字

    JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父 ...

随机推荐

  1. 【LeetCode】821. Shortest Distance to a Character 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 过两遍数组 日期 题目地址:https://leet ...

  2. Java调用Azkaban的RestFul接口

    1.绕过ssl认证的工具类: import java.security.KeyManagementException; import java.security.NoSuchAlgorithmExce ...

  3. [数学]高数部分-Part IV 一元函数积分学

    Part IV 一元函数积分学 回到总目录 Part IV 一元函数积分学 不定积分定义 定积分定义 不定积分与定积分的几何意义 牛顿-莱布尼兹公式 / N-L 公式 基本积分公式 点火公式(华里士公 ...

  4. 《selenium2 python自动化测试》(高清).PDF,免费无需任何解压密码

    链接:https://pan.baidu.com/s/1eAI0mXvJeblBn2Tn9WClEA 提取码:7m5u

  5. 自动化怎么判断anndroid.listview是否包含某个指定的元素或内容

    做自动化的时候,定位元素时,会发现整屏的内容都是放在一个列表,在多层嵌套其他控件组成 如柠檬班的题库,里面会有很多分类 那么在做自动化的时候,怎么判断页面有没有包含指定的分类呢? 整体思路: 1.找到 ...

  6. 解决VirtualBox 运行时报内存不能written

    在VirtualBox 虚拟机中安装系统的时候,突然报"0x00000000指令,该内存不能written",只能强制停止,这个问题要怎么解决呢? 解决办法是恢复系统主题3个dll ...

  7. 在git上下载的源码项目,运行时报错AssertionError [ERR_ASSERTION] [ERR_ASSERTION]: Task function must be specified

    原因是gulp3 和gulp4的运行方式不一样, 解决方法: 1.修改package.json文件中gulp的版本为最新版本 2.删除node_modules文件夹和package-lock.json ...

  8. vim 安装使用 pathogen

    目录 pathogen 是什么? 如何安装? pathogen 是什么? pathogen 一般作为 vim 新手的第一个插件,用来统一管理 vim 插件包. (官方解释)非常容易地管理你的 'run ...

  9. JWT原理及实现

    wt(JSON Web Tokens),是一种开发的行业标准 RFC 7519 ,用于安全的表示双方之间的声明.目前,jwt广泛应用在系统的用户认证方面,特别是现在前后端分离项目. 1. jwt认证流 ...

  10. vue3.0+vite+ts项目搭建(报错处理)

    报错一 warning package.json: No license field$ vue-tsc --noEmit && vite build 解决方案,添加这两行,只添加一个是 ...