java多态概述特点转型I
1 package face_09;
2
3 import com.sun.jdi.Method;
4
5 /*
6 * 对象的多态性。
7 * class 动物
8 * {}
9 *
10 * class 猫 extends 动物
11 * {}
12 *
13 * class 狗 extends 动物
14 * {}
15 *
16 * 猫 x = new 猫();
17 *
18 * 动物 x = new 猫();//一个对象,两种形态。
19 *
20 * 猫这类事物既具备猫的形态,又具备着动物的形态。
21 * 这就是对象的多态性。
22 *
23 * 简单说:就是一个对象对应着不同类型。
24 *
25 * 多态在代码中的体现:
26 * 父类或者接口的引用指向其子类的对象。
27 * 多态的好处:
28 * 提高了代码的扩展性,前期定义的代码可以使用后期的内容。
29 *
30 * 多态的弊端:
31 * 前期定义的内容不能使用(调用)后期子类的特有内容。
32 *
33 * 多态的前提:
34 * 1,必须有关系,继承,实现。
35 * 2,要有覆盖。
36 */
37 abstract class Animal {
38 abstract void eat();
39 }
40
41 class Dog extends Animal {
42 void eat() {
43 System.out.println("啃骨头");
44 }
45 void lookHome() {
46 System.out.println("看家");
47 }
48 }
49 class Cat extends Animal {
50 void eat() {
51 System.out.println("吃鱼");
52 }
53 void catchMouse() {
54 System.out.println("抓老鼠看家");
55 }
56 }
57 class Pig extends Animal {
58 void eat() {
59 System.out.println("饲料");
60 }
61 void gongDi() {
62 System.out.println("拱地");
63 }
64 }
65 public class DuoTaiDemo {
66 public static void main(String[] args) {
67 //Cat c = new Cat();
68 //c.eat();
69 //Dog d = new Dog();
70 //method(c);
71 //method(d);
72 //method(new Pig());
73 Animal a = new Cat();//自动类型提升,猫对象提升了动物类型。但是特有功能无法访问
74 //作用就是限制对特有功能的访问。
75 //专业讲:向上转型。将子类型隐藏。就不用使用子类型的方法。
76 //如果还想用具体动物猫的特有功能。
77 //你可以将该对象进行向下转型。
78 Cat c = (Cat)a;//*向下转型的目的是为了使用子类中的特有方法。
79 c.catchMouse();
80 c.eat();
81 //*注意:对于转型,自始至终都是子类对象在做着类型的变化
82 //Animal a1 = new Animal();
83 Animal a1 = new Dog();
84 Cat c1 = (Cat)a1;//ClassCastException类型转换异常
85 //a.eat();
86 }
87 public static void method(Animal a) {//类型判断
88 a.eat();
89 if(a instanceof Cat) {//instanceof:用于判断对象的具体类型。Cat可以是类可以是接口,只能用于引用数据类型判断
90 Cat c = (Cat)a;//通常在向下转型前用于健壮性的判断。
91 c.catchMouse();
92 }else if (a instanceof Dog) {
93 Dog d = (Dog)a;
94 d.lookHome();
95 }
96 }
97 /*
98 public static void method(Cat c) {
99 c.eat();
100 }
101 public static void method(Dog d) {
102 d.eat();
103 }
104 */
105
106 }
java多态概述特点转型I的更多相关文章
- Java多态的向上转型和向下转型
Java多态的向上转型和向下转型 向上转型:(子类转为父类,自动转型) 格式 :父类类型 变量名 = new 子类类型(); 注:子类赋值给父类,那这时这个父类就能调用子类的方法 向下转型:(父类转为 ...
- Java多态之向上转型
目录 Java多态之向上转型 多态的优点 向上转型 概念 向上转型好在哪 Java多态之向上转型 多态性是面向对象的第三大特征. 多态的优点 改善代码的组织结构和可读性. 能够创建可扩展的程序.(随时 ...
- java多态的向上转型与向下转型(与编译时类型与运行时类型有关)
1.编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定. 当编译时类型和运行时类型不一致时,就会出现所谓的多态. 因为子类是一个特殊的父类,因此java允许把一个子类对象直接 ...
- Java多态、向上转型、向下转型知识分享(讲解全面)
多态(方法的多态.对象的多态) 方法的多态 重写的多态(重要):子类继承父类,因此子类拥有父类属性和方法,如果子类重写父类方法,那么父类调用该方法的时候就会检查子类是否重写该方法,子类重写了就调用子类 ...
- Java多态概述
多态 所谓多态,实际上就是一个对象的多种状态: 下面例子中,Tiger可以看做Tiger,也可以看做Animal Cat 可以看做Cat,也可以看做Animal Dog 可以看做Dog,也可以看做A ...
- java 多态(向上转型)
多态的定义与使用格式 多态的定义格式:就是父类的引用变量指向子类对象 父类类型 变量名 = new 子类类型(); 变量名.方法名(); 普通类多态定义的格式 父类 变量名 = new 子类(); ...
- Java 面向对象概述原理: 多态、Object类,转型(8)
Java 面向对象概述原理: 多态.Object类,转型(8) http://docs.oracle.com/javase/tutorial/java/IandI/override.html Java ...
- Java多态之向下转型
目录 Java多态之向下转型 强制类型转换 instanceof Java多态之向下转型 往期回顾:我们学习了向上转型和动态绑定的概念,可以知道在继承关系中,将一个子类对象赋值给父类的引用变量,调用父 ...
- 多态,向上转型,向下转型,final关键字
多态 概述 多态封装性,继承性之后,面向对象的第三大特性. 定义 多态:是指同一种行为,具有多个不同的表现形式. 生活中,比如跑的动作,猫,狗,大象跑起来的动作都是不一样的,再比如飞的动作 ...
随机推荐
- JS根据日期获取判断星期几
/** * 根据日期字符串获取星期几 * @param dateString 日期字符串(如:2020-05-02) * @returns {String} */ function getWeek(d ...
- IDEA推荐配置(自动导入包、提示不区分大小写)
设置快捷键方式为eclipse 设置代码提示不区分大小写 自动导入包 可以通过 Ctrl + 鼠标滚轮 来控制代码字体大小显示 显示行号和显示区分方法线 代码一行显示不下,软分行显示,点击鼠标右键 增 ...
- 一个简单的基于epoll的udp接收
--- 1 #include <iostream> 2 #include <sys/epoll.h> 3 #include <fcntl.h> 4 #include ...
- 【LeetCode】1024. Video Stitching 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 贪心 日期 题目地址:https://leetcod ...
- 【LeetCode】647. Palindromic Substrings 解题报告(Python)
[LeetCode]647. Palindromic Substrings 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/p ...
- 【LeetCode】859. Buddy Strings 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcod ...
- 1254 - Prison Break
1254 - Prison Break PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Mic ...
- sql注入 —sqli-labs/Less-5 逻辑注入
逻辑注入: 1.尝试查询数据库: (1)判断数据长度 -- 构造逻辑判断:and length(database())=8 当长度等于"8 "时回显正常,所以数据库长度为" ...
- Codeforces 777B:Game of Credit Cards(贪心)
After the fourth season Sherlock and Moriary have realized the whole foolishness of the battle betwe ...
- [算法笔记-题解]问题 C: 例题4-3 比较交换3个实数值,并按序输出
问题 C: 例题4-3 比较交换3个实数值,并按序输出 [命题人 : 外部导入] 时间限制 : 1.000 sec 内存限制 : 12 MB 题目描述 从键盘输入3个实数a, b, c,通过比较交换, ...