继承与多态——动手又动脑
1.首先,第一次执行完源代码后
了解到当调用一个子类的构造方法时,它会依次调用父类的构造函数。以下是原因:当一个类继承了其它类时,在它的构造函数(constructor)中super()
必须被首先调用,如果super()
没有被调用,则编译器将在构造函数(constructor)的第一行插入对super()
的调用。这就是为什么当创建一个子类的对象时会调用父类的构造函数(constructor)的原因。
通过super调用基类构造方法时,必须是子类构造方法中的第一个语句。否则就会报错
构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量。
子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化。
不能反过来调用也是这个原因,因为父类根本不知道子类有什么变量而且这样一来子类也得不到初始化的父类变量,导致程序运行出错!
2.
代码:
1 /* 2 信1705-1 杨瑞 20173610 3 */ 4 package dongshouyoudongnao; 5 class A 6 { 7 public void display() { 8 System.out.println("A方法"); 9 } 10 } 11 class B extends A 12 { 13 public void display() { 14 super.display(); 15 System.out.println("B方法"); 16 } 17 } 18 public class Fruit 19 { 20 public static void main(String[] args) { 21 B b=new B(); 22 b.display(); 23 } 24 }
子类对象可以直接赋给基类变量。
基类对象要赋给子类对象变量,必须执行类型转换。
4.
第一个创建一个Parent对象,调用的是父类的方法,第二个创建一个Child对象,调用的是子类的方法,第三个将子类child的值赋给了parent,调用的是子类的方法,第四个parent.myValue++是对父类中的变量进行自加运算,而parent.printValue()实际上调用的还是子类的方法,第五个((Child)parent).myValue++是将parent对象强制转化成Child,所以指向的是Child类中的变量,进行自加运算之后输出。
当子类和父类拥有同样的方法,对象是子类型的,就调用子类型的方法;对象是父类型的,就调用夫类型的方法。
如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。
5.
多态依赖于类型和实现的分离,多用来把接口和实现分离。
使用多态最大的好处是:
当要修改程序并扩充系统时,需要修改的地方较少,对其它部分代码的影响较小!千万不要小看这两个“较”字,程序规模越大,其优势就越突出。
转载于:https://www.cnblogs.com/qianmo123/p/9890519.html
继承与多态——动手又动脑相关推荐
- 【Java】继承、多态、接口
Java中的继承.多态和接口 1.用类比引入继承概念 众所周知,Java是一门面向对象的语言.如果我们要设计多种多样的交通工具,比如汽车.火车.飞机,虽然这些工具功能不同.形态不同,但是他们很多的基本 ...
- 万字总结,一文带你秒懂Java中的封装、继承和多态(有代码 有示例)
Java中的封装.继承和多态 前言 一.面向对象有什么优势? 二.面向对象的三大特性! 1.封装 1.1访问限定符 1.2关于包的导入 1.2封装 2.继承 2.1继承的语法 2.2父类成员访问 3. ...
- Educoder- 《JAVA从小白到大牛》(第二章)2-3 Java面向对象 - 封装、继承和多态的综合练习
提示:本文章为个人学习记录,仅供参考学习,禁止转载,支持交流与讨论. 文章目录 第1关:通关任务一 任务描述 相关知识 面向对象思想 封装 继承 `super()`和`this()` 编程要求 测试说 ...
- Java面向对象 - 封装、继承和多态的综合练习
面向对象的三个基本特征: 封装,就是把客观的事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的信息隐藏.隐藏实现细节,使得代码模块化. 继承,可以使用现有类的所有功能 ...
- 头歌实践实践教学平台:Java面向对象 - 封装、继承和多态的综合练习
第1关:封装.继承和多态进阶(一) 任务描述 本关任务:按要求编写一个Java应用程序,巩固Java面向对象知识. 相关知识 为了完成本关任务,我们回顾一下前面所学知识:1.面向对象思想 :2.封装: ...
- Go 学习笔记(36)— 基于Go方法的面向对象(封装、继承、多态)
Go 面向对象编程的三大特性:封装.继承和多态. 封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式 继承:使得子类具有父类的属性和方法或者重新定义.追加属性和方法等 多态:不同对象中同种行为的不 ...
- Python中的继承和多态
本文以生活中的基础现象为切入点,主要介绍了Python基础中继承和多态,包括单继承.多继承的语法.多态常见的 "鸭子类型". 以及如何重写父类的方法都做了详细的讲解. 一.继承的介 ...
- python 继承和多态
python 继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Ba ...
- java 封装 继承 堕胎_JAVA封装、继承、多态
封装 1.概念: 将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: a.只能通过规定的方法访问数据 b.隐藏类的实例细节,方便修改和实 ...
最新文章
- mysql 学习 博客_mysql学习
- php+curl+restapi,php – cURL适用于我的REST API,但不是Guzzle
- Windows平台下安装Hadoop
- python socket.error: [Errno 48] Address already in use
- 2021考研计算机网络,2021考研:计算机网络复习重点
- LVM--逻辑卷管理
- 电脑小技巧:怎么取消电脑开机密码
- 在Eclipse中安装Maven插件
- TikTok二面:“聊聊二维码扫码登录的原理”
- 北京大学网络教育学院计算机,北京大学继续教育部
- IP地址0.0.0.0是什么意思?
- hive会产生大量的tmp文件
- ASM学习笔记1 - 初识ClassVistor ——以ClassReader的应用为例
- 我理解的Java栈与堆,String类
- MFC 滚动显示图片
- stick to it
- Google的垂直搜索
- java%3c%3e符号,有趣的 JavaScript 格式转换
- 崔岩的笔记——动态时间规整算法(Dynamic Time Warping,DTW)
- 服务器主板显示e2,大金中央空调有一台机面板显示E2是什么问题如何解决故障...
热门文章
- 小程序 - 效果处理之技巧合集(更新中...)
- OpenCV在Linux下的编译安装(Ubuntu )
- 类模版静态成员初始化
- Gridview Master/Detail JS
- 谈周六晚上的毕业典礼
- 关于:为什么在 Real Producer 10 Plus 里面找不到 RealAudio 10 with aacPlus的解答
- python用哪个版本比较好 2020_2020年最常见的Python面试题答案
- RS232与RS485的功能与区别!
- 解决电脑没有任何图标问题(以及没有底部的任务栏)
- 【相关性搜索】 多字段搜索的两种方式——词中心与字段中心