Java instanceof 全小写 关键字使用
1 package com.bytezreo.duotai2;
2
3 import java.sql.Date;
4
5 /**
6 *
7 * @Description 面向对象的特征三 ------多态性
8 * @author Bytezero·zhenglei! Email:420498246@qq.com
9 * @version
10 * @date 2021年9月20日下午4:56:10
11 * @
12 *
13 *
14 * 1.理解多态性: 可以理解为一个事物的多态性
15 * 2.何为多态性: 父类的引用指向子类的对象(或子类的对象赋给父类的引用)
16 *
17 * 3.多态的使用:虚拟方法调用
18 * 有了对象的多态性的以后,我们在编译器期,只能调用父类中声明的方法,但是
19 * 在运行期,我们实际执行的是 子类重写父类的方法。
20 *
21 * 总结:编译,看左边,执行看右边
22 *
23 * 4.多态性的使用前提:(1)类的继承关系 (2) 要有方法的重写
24 *
25 * 5.对象的多态性,适用于方法,不适用于属性(属性:编译和运行都只看左边)
26 *
27 * 6.多态性是运行时行为;
28 *
29 * 7.动态绑定
30 *
31 *
32 * ****************************************************************************
33 *
34 *
35 *
36 */
37 public class PersonTest
38 {
39 public static void main(String[] args)
40 {
41 Person p1 = new Person();
42 p1.eat();
43
44
45 Man man = new Man();
46 man.eat();
47 man.age = 25;
48 man.makeMoney();
49
50 /***********************/
51 System.out.println("----------------------------");
52 //对象多态性:父类的引用指向子类的对象
53 Person p2 = new Man();
54
55 //多态的使用:当调用子父类同名同参的方法时,实际执行的是子类重写父类的
56 //方法---虚拟方法调用
57 p2.eat(); //子类的
58 p2.walk();
59
60
61 //p2.makeMoney();
62
63
64
65
66 // Person p3 = new Woman();
67
68 System.out.println(p2.id); //1001 父类
69 // ***********************************************
70
71
72 System.out.println("************************");
73
74
75 //不能调用子类所特有的方法,属性:编译时,p2是person类型,
76 // p2.makeMoney();
77
78 //p2.isSmoking = true;
79 p2.name = "Tom";
80
81 //有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法,但是
82 //由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法。子类特有的
83 //属性和方法不能调用。
84
85 //如何才能调用子类特有的属性和方法?
86 //使用强制类型转换符
87 Man m1 = (Man)p2; //强转类型
88 m1.makeMoney();
89 m1.isSmoking = true;
90
91
92 //使用强转时,可能出现 .ClassCastException的异常
93 // Woman w1 = (Woman)p2;
94 // w1.goShopping();
95
96 //为了避免 ClassCastException的异常 引入了
97 // instanceof 全小写
98 /**
99 * instanceof 全小写 关键字使用
100 *
101 * a instanceof A : 判断 对象 a 是否是类A的实例
102 * 如果是 返回 true 不是返回 false
103 *
104 *
105 * 使用情境:为了避免向下转型时出现 ClassCastException的异常,我们在向下
106 * 转型进行之前,先进行 instancof 的判断,一旦返沪true,就进行向下转型,
107 * 如果 返回 false,不进行向下转型
108 *
109 * 如果 a instanceof A 返回 true,则 a instanceof B 也返回true.
110 * 其中 类B是类A的父类。
111 *
112 *
113 */
114
115 //执行不了 new 的是什么就是什么 Person p2 = new Man();
116 if(p2 instanceof Woman)
117 {
118 Woman w1 =(Woman)p2;
119 w1.goShopping();
120 System.out.println("******* Woman*****");
121 }
122
123
124
125 if(p2 instanceof Man)
126 {
127 Man m2 =(Man)p2;
128 m2.makeMoney();
129 System.out.println("******* Man*****");
130 }
131
132 if(p2 instanceof Person)
133 {
134 System.out.println(" ************ Person *********");
135 }
136
137 if(p2 instanceof Object)
138 {
139 System.out.println("---------- Object ----------");
140 }
141
142
143
144
145 //练习:
146 //问题一:编译通过,运行不通过
147 //举例一
148 // Person p3= new Woman();
149 // Man m3 = (Man)p3;
150
151 //举例二
152 // Person p4 = new Person(); //不可以
153 // Man m4 = (Man)p4;
154
155
156
157 //问题二:编译通过 运行通过 父类的父类 Woman 子类
158 // Object obj = new Woman(); //可以的
159 // Person p = (Person)obj;
160
161
162 //问题三 编译不通过
163
164 // Man m5 = new Woman(); 类型不匹配,没有任何关系,鄙必须是子父类
165
166 //String str = new Date();
167
168 // Object p = new Date();
169 // String str1 = (String) p;
170 }
171 }
1 package com.bytezreo.duotai2;
2
3 public class Person
4 {
5 String name;
6 int age;
7
8 int id = 1001;
9
10 public void eat()
11 {
12 System.out.println("人,吃饭");
13 }
14 public void walk()
15 {
16 System.out.println("人,走路");
17 }
18
19
20
21
22
23 }
1 package com.bytezreo.duotai2;
2
3 public class Man extends Person
4 {
5 boolean isSmoking;
6
7 int id = 1002;
8
9 public void makeMoney()
10 {
11 System.out.println("男人养家家,挣钱");
12 }
13
14 //重写
15 public void eat()
16 {
17 System.out.println("男人多吃吃饭");
18 }
19 public void walk()
20 {
21 System.out.println("男人霸气走路");
22 }
23
24
25
26 }
1 package com.bytezreo.duotai2;
2
3 public class Woman extends Person
4 {
5 boolean isBeauty;
6
7 public void goShopping()
8 {
9 System.out.println("女人喜欢购物");
10 }
11
12 //重写
13 public void eat()
14 {
15 System.out.println("女人吃饭,减肥");
16 }
17 public void walk()
18 {
19 System.out.println("女人窈窕的走路");
20 }
21
22 }
1 package com.bytezreo.duotai2;
2
3 //多态性的使用 举例一
4 public class AnimalTest
5 {
6 public static void main(String[] args)
7 {
8 AnimalTest test = new AnimalTest();
9 test.func(new Dog());
10
11
12 test.func(new Cat());
13
14
15 }
16
17 //声明是 animal Animal animal = new Dog();
18 public void func(Animal animal)
19 {
20 animal.eat();
21 animal.shout();
22
23 if(animal instanceof Dog )
24 {
25 Dog d = (Dog)animal;
26 d.watchDoor();
27 }
28
29
30
31 }
32
33
34
35 //没有多态性的时候
36 // public void func(Dog dog)
37 // {
38 // dog.eat();
39 // dog.shout();
40 // }
41 //
42 // public void func(Cat cat)
43 // {
44 // cat.eat();
45 // cat.shout();
46 // }
47 //
48 //
49
50 }
51
52 class Animal
53 {
54 public void eat()
55 {
56 System.out.println("动物:进食");
57 }
58 public void shout()
59 {
60 System.out.println("动物:叫");
61 }
62
63
64
65
66
67 }
68
69 class Dog extends Animal
70 {
71 public void eat()
72 {
73 System.out.println("狗:吃骨头");
74 }
75 public void shout()
76 {
77 System.out.println("狗:汪汪汪");
78 }
79
80 public void watchDoor()
81 {
82 System.out.println("看门");
83 }
84 }
85
86
87
88 class Cat extends Animal
89 {
90 public void eat()
91 {
92 System.out.println("猫:吃大鱼");
93 }
94 public void shout()
95 {
96 System.out.println("猫:喵喵喵");
97 }
98 }
99
100 //举例二
101
102 class Order
103 {
104 public void method(Object obj)
105 {
106
107 }
108 }
Java instanceof 全小写 关键字使用的更多相关文章
- “全栈2019”Java第十章:关键字
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算
JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...
- java基础基础总结----- 关键字、标识符、注释、常量和变量、运算符、语句、函数、数组(三)
Java语言基础组成:关键字.标识符.注释.常量和变量.运算符.语句.函数.数组 一.标识符 标识符是在程序中自定义的一些名称,由大小写字母[a-zA-Z],数字[0-9],下划线[ _ ],特殊字符 ...
- Java基础-标识符与关键字
Java基础-标识符与关键字 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是标识符 标识符就是程序员在编写程序时,给类,变量,方法等起的名字. 二.标识符的命名规则 1& ...
- Java基本数据类型、关键字
Java基本数据类型.关键字 一.Java基本数据类型 Java有8中基本数据类型:byte\char \short \int\float\double\long\boolean 在说明每种类型大小前 ...
- C++ 'dynamic_cast' and Java 'instanceof' 使用对比
在Java中,如果A是基类,B是A的派生类,那么instanceof可以用来判断一个实例对象是A还是B,相当于一个二元操作符,但与==, >, < 不同的是,它是由字母组成,是Java的保 ...
- toUpperCase(),toLowerCase()将字符串中的英文转换为全大写或全小写
package seday01;/** * String toUpperCase() * String toLowerCase() * 将字符串中的英文转换为全大写或全小写 * @author xin ...
- 乐字节Java变量与数据类型之一:Java编程规范,关键字与标识符
大家好,我是乐字节的小乐,这次要给大家带来的是Java变量与数据类型.本文是第一集:Java编程规范,关键字与标识符. 一.编程规范 任何地方的名字都需要见名知意: 代码适当缩进 书写过程成对编程 对 ...
- Java基础语法(1)-关键字与保留字
title: Java基础语法(1)-关键字与保留字 blog: CSDN data: Java学习路线及视频 1.关键字 关键字(keyword)的定义和特点 定义:被Java语言赋予了特殊含义,用 ...
- Java基础学习笔记-关键字、标识符、分隔符
标识符(identifier),我的理解呢,简单来说就是一个常量或者变量的名字啦 命名规则: 只能以 字母..$ 这三种开头,后面的话就可以由字母..$和数字组成 不能用Java中的关键字 不能包含空 ...
随机推荐
- 【k哥爬虫普法】Python程序员爬取视频资源13万部,一分钱没挣,获刑2年!
我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...
- Go - 基本数据类型和其字符串表示之间转换
1. 基本数据类型和其字符串表示之间转换 基本类型的值,都有一个字符串表示,如数字类型值1 字符串表示为 "1",字符的编码为Unicode或者UTF-8,数字的编码是 int,底 ...
- vim 从嫌弃到依赖(16)——宏
终于到了我第二喜欢的vim功能了(当然了,最喜欢的是.命令).我原本计划在介绍完.命令之后介绍宏,以便让各位小伙伴们能了解到vim对于重复操作进行的强大的优化.但是由于宏本身跟寄存器息息相关,所以还是 ...
- 【任务调度】Spring 的动态定时任务之 ScheduledTaskRegistrar(解决方案一)
前言 在做SpringBoot项目的过程中,有时客户会提出按照指定时间执行一次业务的需求. 如果客户需要改动业务的执行时间,即动态地调整定时任务的执行时间,那么可以采用SpringBoot自带 ...
- js下载附件(文件时候),文件名一直不出现乱码
if (lastUrl.name) { //我们后端很奇怪有时候是个对象属性,有时候是个string window.open(url + `?attname=${lastUrl.name}`); } ...
- 个人找工作面试准备------以及别人面试心得{待更新中ing}
参考链接先放: https://blog.csdn.net/u014400934/article/details/102577804?utm_medium=distribute.pc_relevant ...
- C/C++ Crypto密码库调用方法
Crypto 库是C/C++的加密算法库,这个加密库很流行,基本上涵盖了市面上的各类加密解密算法,以下代码是我在学习是总结的,放到这里用于后期需要时能够快速解决问题. 项目地址:https://www ...
- 从嘉手札<2023-10-25>
晨辉明灭 启明星低垂的挂在天边 烟霞浅浅的铺满了东方的天幕 赤红中张扬着睥睨的紫光 可惜 不过又是无趣的一天 我百无聊赖的抬起头 从缝隙里看向窗外的天空的一角 只是觉得无趣 一天天的日子如流水般远去 ...
- 【C++深度剖析】为什么C++支持函数重载而C不支持--C++程序编译链接过程--符号表生成规则【Linux环境超详细解释C++函数重载底层原理】
文章目录 前言 Linux环境g++编译器的配置以及一些准备工作 源文件的符号表生成以及分析 尾声 前言 先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点赞和支持对于我来说是一种 ...
- Shopee x JuiceFS:ClickHouse 冷热数据分离存储架构与实践
本文来自 shopee 技术团队 摘要 Shopee ClickHouse 是一款基于开源数据库 ClickHouse 做二次开发.架构演进的高可用分布式分析型数据库.本文将主要介绍 Shopee C ...