关键词instanceof、重写、继承、多态
1、instanceof关键词
A instanceof B是用来判断内存中的实际对象A是不是B类型(具体事例看3小节代码)
2、重写条件:
1、继承关系
2、子类重写父类方法
3、方法名一样,参数个数和类型一样
3、继承
子类Student继承父类Person,实例化子类对象student的时候,在堆中会为其分配内存空间,在其内存空间中再划分一部分空间作为实例化一个父类new Person()的内存空间,这个父类对象的属性方法只为子类对象student服务
装箱和拆箱
public class Person {
String name;
}
public class Student extends Person{
int height;
public void study() {
System.out.println("学习");
}
}
public class Test05 {
public static void main(String[] args) {
Person p = new Person();
Student s = new Student();
//instanceof可用于if判断中
System.out.println(p instanceof Person); //true
System.out.println(s instanceof Student); //true
System.out.println(s instanceof Person); //true
System.out.println(p instanceof Student); //false
//装箱
//当把Student对象赋值给Person类型引p1时,p1指向Student对象地址,但引用p1只能找到(识别)Person中自带的属性和方法
Person p1 = s;
//下面这个写法其实和上面的Person p1 = s;是一个意思
Person p2 = new Student();
//拆箱
//再把父类强制转换为子类(前提是:首先要有一个子类对象赋值给父类的引用)
//s2指向对象p1地址,但是由于p1指向的是Student对象地址,所以s2指向的是Student对象地址,引用s2是Student类型可以找到Person和Student中自带的属性和方法
Student s2 = (Student)p1;
//注意:并不能直接把父类强制转换为子类
//Student s3 = (Student)p;
System.out.println(p1 instanceof Person); //true
System.out.println(p1 instanceof Student); //true
System.out.println(p2 instanceof Person); //true
System.out.println(p2 instanceof Student); //true
}
}
4、多态
面向对象三大特性:封装、继承、多态
多态存在的三个条件:
1、子类继承父类
2、子类重写父类方法
3、父类的引用指向子类的对象
小男孩玩宠物
拆箱装箱简单实例:
public class Boy {
/**
* Pet类、Bird类、Pig类 装箱拆箱
* @param p
*/
public void play(Pet p) {
if(p instanceof Bird) {
Bird d = (Bird) p;
d.birdEnjoy();
}else if(p instanceof Pig) {
Pig pig = (Pig) p;
pig.pigEnjoy();
}
}
}
//宠物类
public class Pet {
public void enjoy() {
System.out.println("叽叽叽叽~~~宠物很高兴");
}
}
//小猪类
public class Pig extends Pet{
public void pigEnjoy() {
System.out.println("哼哼哼哼~~~~小猪很高兴!");
}
}
//小鸟类
public class Bird extends Pet{
public void birdEnjoy() {
System.out.println("叽叽叽叽~~~鸟儿很高兴");
}
}
public class BoyFun {
public static void main(String[] args) {
Boy boy = new Boy();
Bird b = new Bird();
Pig p = new Pig();
boy.play(b);
boy.play(p);
}
}
运行:
叽叽叽叽~~~鸟儿很高兴
哼哼哼哼~~~~小猪很高兴!
多态简单实例:
public class Boy {
public void play(Pet p) {
p.enjoy();
}
}
//宠物类
public class Pet {
public void enjoy() {
System.out.println("叽叽叽叽~~~宠物很高兴");
}
}
//小猪类
public class Pig extends Pet{
public void enjoy() {
System.out.println("哼哼哼哼~~~~小猪很高兴!");
}
}
//小鸟类
public class Bird extends Pet{
public void enjoy() {
System.out.println("叽叽叽叽~~~鸟儿很高兴");
}
}
public class BoyFun {
public static void main(String[] args) {
Boy boy = new Boy();
Bird b = new Bird();
Pig p = new Pig();
boy.play(b);
boy.play(p);
}
}
运行:
叽叽叽叽~~~鸟儿很高兴
哼哼哼哼~~~~小猪很高兴!
转载于:https://www.cnblogs.com/snzd9958/p/9452331.html
关键词instanceof、重写、继承、多态相关推荐
- (JAVA学习笔记) 类的继承,super,方法的重写,多态
文章目录 类的继承,super,方法的重写,多态 1.类的继承 代码演示: 2.super和this 代码演示: 3.方法的重写 代码演示: 4.多态 代码演示: 类的继承,super,方法的重写,多 ...
- Python零基础速成班-第9讲-Python面向对象编程(上),对象和类、初始化、继承、重写、多态、类方法、组合
Python零基础速成班-第9讲-Python面向对象编程(上),对象和类.初始化.继承.重写.多态.类方法.组合 学习目标 修饰器 面向对象编程:对象和类.初始化.继承.重写.多态.类方法.组合 课 ...
- 大数据笔记8—java基础篇4(面向对象-封装-继承-多态)
面向对象 一.面向对象 1.面向过程 1.2.举例 1.3.总结 二.面向对象 1.简述 2.举例 3.思想特点 2.1.类的定义格式 2.1.1.简述 2.2.2.格式 2.3.3.示例 三.类的使 ...
- (十)Core Java 面向对象(封装,继承,多态,接口) -02 (96)
目录 : 24 ). 面向对象(聚集关系) 25 ). 面向对象(子父类中变量的特点) 26 ). 面向对象(子父类中函数的特点-覆盖) 27 ). 面向对象(子父类中构造函数的特点 ...
- 面向对象的三大特征:封装 继承 多态
封装: 封装的概念: 代码的整合, 封装的层次: 函数的封装: 把一组操作整合在一起 类的封装: 把属性和方法整合在一起 结构的封装:根据操作的性质(模型/控制操作/交互视图)进行结构设计封装 ...
- python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)
面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...
- python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态
六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...
- Java继承多态经典案例分享
今天动力节点java培训机构小编为大家分享Java继承多态经典案例,希望通过此文能够帮助到大家,下面就随小编一起看看Java继承多态经典案例. public class A { public Stri ...
- Python的继承多态
Python的继承多态 文章目录 Python的继承多态 一.私有属性和私有方法 01. 应用场景及定义方式 02. 伪私有属性和私有方法 二.单例 01. 单例设计模式 单例设计模式的应用场景 02 ...
- python-类继承多态
python-类继承多态 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. class car:'车的重量与驾驶方法类'car ...
最新文章
- android 应用变量,Android全局应用变量的使用
- java管理系统用怎么框架做_java 使用servlet做学生管理系统(无框架)
- android相册管理,Piktures - 最优雅的相册管理 - Android 应用 - 【最美应用】
- ICCV2021 香港理工、阿里达摩院提出RealVSR:视频超分任务中的新数据集与损失方案...
- oracle 安装ora 27102,Oracle ora-27102 错误
- 专业级的WPF条形码控件
- easyui学习笔记3—在展开行内的增删改操作
- git拉取github上的分支和本地分支提交到github
- 【数字信号】基于matlab CEEMD数字信号分解【含Matlab源码 1383】
- 「每天一道面试题」Redis的优势有哪些?
- 数学建模之线性规划问题与LINGO软件的使用
- 【听课笔记】复旦大学遗传学_08遗传分析方法
- 计算机usb接口无法读取,USB设备识别不了,USB接口无法识别设备怎么办
- 智能分数计算机在线使用,作业帮智能计算器在线使用
- 《别让这种习惯毁掉你的一生,改变他!》
- 【css】fa图标变细
- 苹果净利润同比下滑19%,大中华区下滑30%;养老基金将入股市投资,首批可能达2000亿元
- html5 audio样式修改,HTML5中 audio的样式设置
- 顽固的计算机老师,电脑运行很慢 四招教你清除电脑系统里的那些“顽固垃圾”...
- Appium+Java模拟手机按键