ZJU-java进阶笔记 第四周(继承与多态)
继承是面向对象语言的重要特征之一,没有继承的语言只能被称作“使用对象的语言”。
子类从父类那里继承来了所有的成员
① 除了构造函数,毕竟构造函数和父类同名
② 得到不等于可以随便使用
如果我们试图重新定义一个在父类中已经存在的成员变量,那么我们是在定义一个与父类的成员变量完全无关的变量,在子类中我们可以访问这个定义在子类中的变量(父类的被隐藏起来了),在父类的方法中访问父类的那个。尽管它们同名但是互不影响。
在调用子类的构造函数前会先调用父类的构造函数
字类的构造函数的第一句 super()表示根据参数去调用父类哪一个构造器
构造一个子类的对象时,首先要确保父类拥有的成员变量得到恰当的初始化
指的是:定义初始化和构造器构造器里面不是只能有this.title = title这类
把父类的成员变量由private改成protected是没办法的办法
例:子类中原
System.out.println("DVD:"+title+":"+director);
现改成
System.out.print("DVD:");
super.print();
System.out.print(director);
在父类中加入
public void print(){System.out.print(title+" ");
}
这样就不需要把父类成员title由private改成protected
- Java中所有保存对象类型的变量是多态变量。“多态”这个术语(字面意思是许多形态)是指一个变量可以保存不同类型(即其声明的类型或任何子类型)的对象。
Car myCar = new Car();
即子类的对象可以被当作父类的对象使用,具体包括:
① 赋值给父类的变量(发生了向上造型)
(造型是把一个类型的对象,赋给另一个类型的变量)
向上造型是不需要前面加括号,括号里面放类型,是永远安全的
② 传递给需要父类对象的函数
③ 放进存放父类对象的容器里
public void list(){for(Item item:listItem){item.print();}
}
认为每个变量都有静态和动态两种类型
静态是看到的,如这里的Item类型
动态是程序运行到这里,实际管理的的对象类型
11.父类对象如果想赋值给子类的对象,只能通过造型
例1
Vechicle v;
Car c = new Car();
v = c;//可以
c = v;//编译报错
c = (Car) v;//向下造型,当且仅当v这个变量实际管理的是Car类型
例2(注:Item是CD类的父类)
Item item = new Item("行路易知难", 0, "优秀公众号");
CD cd = new CD("深夜书店","许嵩",2, 10, "超好听");
item = cd;(item的动态类型变成cd了,静态未变)
CD cd2 = (CD)item;
- Java里面对象给对象赋值其实是让两个管理者管理一个共同的对象(OOP语言都这样)
String s = “hi”
s = “bye”
不是用bye替换hi,只是s管理的内容变了,原先指向hi,现在指向bye
- 造型cast的标准定义
什么是类型转换
int i = (int)10.2
造型只是把你当作另外一个类型看待,并没有把你改造成另外一个类型
向上造型总是安全的
- Java默认动态绑定
绑定:对象变量调用函数的时候,决定调用哪一个这件事
静态绑定:根据变量的声明(静态)类型决定绑定哪个
动态绑定:根据变量的动态类型决定绑定哪个
在一个成员函数中调用其他成员函数,由于可以表示为this.……,也可认为是动态绑定
例如父类Item的print()函数如下
public void print(){System.out.print(title+" ");
}
而输出却为
CD:深夜书店 许嵩(title是”深夜书店”)
这是因为子类CD的print()函数如下
public void print() {System.out.print("CD:");super.print();System.out.print(artist);
}
item.print();实际调用了子类的print()
覆盖:子类和父类中存在名称和参数完全相同的函数,这一对函数构成覆盖关系。
通过父类的变量调用存在覆盖关系的函数时,会调用变量当时所管理的对象所属的类的函数Java当中所有的类,不管声不声明,都是Object的子类(几乎所有OOP语言都实现了这样的单根结构,除了C++)
Object类提供了函数
toString()【返回一个对象的字符串表达形式】【可通过generate重载】
equals()【比较两个对象是否相同】
……
如何得到
Object o = new Object();
o.……
例
CD cd = new CD("奇妙能力歌","陈粒",1, 5, "好听");
CD cd1 = new CD("奇妙能力歌","陈粒",1, 5, "好听");
System.out.println(cd.equals(cd1));
输出
false
原因:现在CD类没有自己的equals(),使用的是Object的,用来判断两个管理者管理的是否是同一个对象
解决方案:在CD中使用generate重载equals,即加入如下代码
@Overridepublic boolean equals(Object obj) {CD cc = (CD)obj;//向下造型return artist.equals(cc.artist);
}
新输出
true
注:见到@Override,则子类和父类函数的签名(函数名和参数)必须一样
相关文章:

浅谈《think in java》:一 对象导论总结
清单1. 抽象机制,面向对象程序设计方式 java所基于Smalltalk的特性表现一种纯粹的面向对象设计方式: 万物都是对象 程序是对象的集合(容器),他们通过发送消息(发送请求)来告知彼此所要做的。 每…

CSP 201812-2 小明放学 Python实现+详解
试题 代码 # 红灯 r 秒,黄灯 y 秒,绿灯 g 秒 r, y, g [int(i) for i in input().split()]# n表示小明总共经过的道路段数和看到的红绿灯数目 n int(input())# 定义getTime(k,t,time)函数计算时间开销 # k为0,1,2,3时…

《学习OpenCV》第三章习题 第3题
这是一个很有意思的题目,通过这个题我们可以理解图形的内部存储和cvPtr*D函数族的使用方法。 简单来说,图像就是矩阵,在一般的图像中,每个像素中存储了3个变量,分别代表BGR三通道的值,cvPtr*D函数族就是帮助…

给input type=color设置默认值
参考:https://stackoverflow.com/questions/14943074/html5-input-colors-default-color?utm_mediumorganic&utm_sourcegoogle_rich_qa&utm_campaigngoogle_rich_qa <input type"color"> 默认值为“#000000”, 想要更改默认值…

ZJU-java进阶笔记 第六周(抽象与接口)
abstract (1) 抽象类不可以用来制造对象,但可以用来定义变量,当然将来付给这个变量的一定是这个抽象类的非抽象子类的对象 (2) 抽象类的非抽象子类必须覆盖父类中的抽象函数,这种覆盖叫做实现两…

库存事务处理现有量检查
--检查现有量CURSOR c_lot_number(l_organization_id NUMBER,p_inventory_item_id IN NUMBER) ISSELECT mln.lot_number, mln.expiration_dateFROM mtl_lot_numbers mlnWHERE mln.inventory_item_id p_inventory_item_id-- AND mln.status_id 1 --有效合格批次AND mln.orga…

数据变金矿:一文读懂序列模型(附用例)
简介 众所周知,人工神经网络(ANN)的设计思路是模仿人脑结构。但是直到10年前,ANN和人类大脑之间唯一的共同点是对实体的命名方式(例如神经元)。由于预测能力较弱并且实际应用的领域较少,这样的神经网络几乎毫无用处。 …

ZJU-java进阶笔记 第七周(异常处理)
异常的定义 捕捉异常范例 try{//可能产生异常的代码 }catch(Type1 id1){//处理Type1异常的代码 }catch(Type2 id2){//处理Type2异常的代码 }catch(Type3 id3){//处理Type3异常的代码}异常捕捉的意义:异常发生,程序也不需要终止 3. 捕捉到异常对象后…

【组队学习】【35期】吃瓜教程——西瓜书+南瓜书
吃瓜教程——西瓜书南瓜书 航路开辟者:谢文睿、秦州领航员:凌亮航海士:谢文睿、秦州 基本信息 开源内容:https://github.com/datawhalechina/pumpkin-bookB站视频:https://www.bilibili.com/video/BV1Mh411e7VU内容…

SmartDispatcher 类
UI线程中使用 public class SmartDispatcher { public static void BeginInvoke(Action action) { if (Deployment.Current.Dispatcher.CheckAccess() || DesignerProperties.IsInDesignTool) { action(); } else { Deployment.Current.Dispatcher.BeginInvoke(action); } } }…

三、临时弹出一个QQ对话窗口
第一种:需要添加好友才可以访问 <a href"http://wpa.qq.com/msgrd?v3&uin317985559&siteqq&menuyes" target"_blank">123 </a> 第二种:不需要添加好友即可访问 上网去搜吧,小臂崽子转载于:http…

ZJU-java进阶笔记 第七周(输入输出)
流是Java处理输入输出的方式流的基础类——以字节(byte)形式 InputStream OutputStream 例 public class Main {public static void main(String[] args){System.out.println("请输入:");//定义一个字节数组byte[] buffer new byte[1024];try {int len …

Jquery实现的Tabs页签
管理导航系统设置用户管理内容管理其他管理1111111222222222333333333334444444444555555555555555<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns&qu…

【组队学习】【35期】动手学数据分析
动手学数据分析 航路开辟者:陈安东、金娟娟、杨佳达、老表、李玲、张文涛、高立业领航员:六一航海士:郑园园、李牧轩、高岩 基本信息 开源内容:https://github.com/datawhalechina/hands-on-data-analysis开源内容:…

postfix邮箱服务
1、使用postfix服务之前,需要先安装DNS服务,指定邮件交换记录;2、编辑postfix服务配置文件;3、安装dovecot服务、用于本地进行邮件发接测试;4、创建两个用户,并添加到mailusers组中;5、在Linux虚…

mysql数据库基本介绍及常见使用
关系型数据库 ● 二维表 ● 表中的一行,称为记录,表中的列, 称为字段(属性) ● 行列交叉的单元格的值,叫属性值或字段值。 ● ORACLE DB2 Mysql SQL SERVER 关系型数据库 常用的指令(可以在命令行执行&…

FilenameFilter的使用
使用FilenameFilter过滤掉chapter开头的文件。 1 public class contentFilter implements FilenameFilter {2 public boolean isContent(String file) {3 if (file.startsWith("chapter")){4 return false;5 }else{6 return true;7 }8 …

Qt 串口连接
Qt 串口连接 使用 Qt 开发上位机程序时,经常需要用到串口,在 Qt 中访问串口比较简单,因为 Qt 已经提供了 QSerialPort 和 QSerialPortInfo 这两个类用于访问串口。 使用 QSerialPort Qt 提供的 QSerialPort 类继承于 QIODevice,也…

navicat for mysql如何在更新记录时自动记录更新时间
如图所示 步骤 添加属性recordTime(任意)设置属性类型为timestamps勾选 根据当前时间戳更新默认栏填 CURRENT_TIMESTAMP 效果

ASP.NET Web API自身对CORS的支持:从实例开始
在《通过扩展让ASP.NET Web API支持W3C的CORS规范》中我们通过自定义的HttpMessageHandler为ASP.NET Web API赋予了跨域资源共享的能力,具体来讲,这个自定义的CorsMessageHandler的自由主要体现在如下两个方面:其一,为简单跨域请求…

2021第12届蓝桥杯省赛 -- 填空题:试题B:直线
试题B:直线 问题描述 在平面直角坐标系中,两点可以确定一条直线。如果有多点在一条直线上, 那么这些点中任意两点确定的直线是同一条。 给定平面上 2 3 个整点(x,y)∣0≤x<2,0≤y<3,x∈Z,y∈Z{(x, y)|0 \leq x < 2, 0 \leq y &l…

Markdown快速上手
基本语法 标题 #标题名共六级,依次“#”数量增加,字体减小 加粗文字 哈喽 两个“* ”文字内容 再两个 斜体文字 哈喽 一个“*” 文字内容 再一个 无序列表 -列表内容回车两次退出此编辑模式 有序列表 1.列表内容回车两次退出此编辑模式 插入链接 百度链接…

复杂SELECT语句执行过程
通过FROM子句中找到需要查询的表通过WHERE子句进行分组函数筛选判断通过GROUP BY子句完成分组操作通过HAVING子句完成组函数筛选判断通过SELECT子句选择显示的列或表达式及组函数通过ORDER BY子句进行排序操作 书写时按照这个顺序:5 1 2 3 4 6 出处:东软Java实训

MTD NANDFLASH驱动相关知识介绍
转:http://blog.csdn.net/zhouzhuan2008/article/details/11053877 目录 MTD总概述MTD数据结构 MTD相关层实现MTD,Memory Technology Device即内存技术设备字符设备和块设备的区别在于前者只能被顺序读写,后者可以随机访问;同时&a…

Spring Boot轻松理解动态注入,删除bean
原文地址:http://412887952-qq-com.iteye.com/blog/2348445 我们通过getBean来获得对象,但这些对象都是事先定义好的,我们有时候要在程序中动态的加入对象.因为如果采用配置文件或者注解,我们要加入对象的话,还要重启服务,如果我们想要避免这一情况就…