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的更多相关文章

  1. Java多态的向上转型和向下转型

    Java多态的向上转型和向下转型 向上转型:(子类转为父类,自动转型) 格式 :父类类型 变量名 = new 子类类型(); 注:子类赋值给父类,那这时这个父类就能调用子类的方法 向下转型:(父类转为 ...

  2. Java多态之向上转型

    目录 Java多态之向上转型 多态的优点 向上转型 概念 向上转型好在哪 Java多态之向上转型 多态性是面向对象的第三大特征. 多态的优点 改善代码的组织结构和可读性. 能够创建可扩展的程序.(随时 ...

  3. java多态的向上转型与向下转型(与编译时类型与运行时类型有关)

    1.编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定. 当编译时类型和运行时类型不一致时,就会出现所谓的多态. 因为子类是一个特殊的父类,因此java允许把一个子类对象直接 ...

  4. Java多态、向上转型、向下转型知识分享(讲解全面)

    多态(方法的多态.对象的多态) 方法的多态 重写的多态(重要):子类继承父类,因此子类拥有父类属性和方法,如果子类重写父类方法,那么父类调用该方法的时候就会检查子类是否重写该方法,子类重写了就调用子类 ...

  5. Java多态概述

    多态 所谓多态,实际上就是一个对象的多种状态: 下面例子中,Tiger可以看做Tiger,也可以看做Animal Cat  可以看做Cat,也可以看做Animal Dog 可以看做Dog,也可以看做A ...

  6. java 多态(向上转型)

    多态的定义与使用格式 多态的定义格式:就是父类的引用变量指向子类对象 父类类型  变量名 = new 子类类型(); 变量名.方法名(); 普通类多态定义的格式 父类 变量名 = new 子类(); ...

  7. Java 面向对象概述原理: 多态、Object类,转型(8)

    Java 面向对象概述原理: 多态.Object类,转型(8) http://docs.oracle.com/javase/tutorial/java/IandI/override.html Java ...

  8. Java多态之向下转型

    目录 Java多态之向下转型 强制类型转换 instanceof Java多态之向下转型 往期回顾:我们学习了向上转型和动态绑定的概念,可以知道在继承关系中,将一个子类对象赋值给父类的引用变量,调用父 ...

  9. 多态,向上转型,向下转型,final关键字

    多态 概述   多态封装性,继承性之后,面向对象的第三大特性. 定义   多态:是指同一种行为,具有多个不同的表现形式.   生活中,比如跑的动作,猫,狗,大象跑起来的动作都是不一样的,再比如飞的动作 ...

随机推荐

  1. springboot发送邮件(含附件)

    引入maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  2. UDP&串口调试助手用法(4)

    接收配置用法 概览 保存文件 可将数据保存到文件和文件夹 如果选择的时文件,则需要自己手动选择保存的文件. 如果选择的时文件夹,则需要指定文件夹的类型和文件的后缀 支持保存文件类型: 文本文件和二进制 ...

  3. Android中Log信息的输出方法

    第一步:在对应的mk文件中加入:LOCAL_LDLIBS:= -llog第二步:在要使用LOG的cpp文件中加入:#include <android/log.h>#define LOGD( ...

  4. 【LeetCode】140. Word Break II 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归求解 日期 题目地址:https://leetc ...

  5. Mysql客户端的安装

    Mysql数据库(简称)属于C/S架构,正常工作中一般都会提供服务端,我们只需要安装客户端进行查询修改数据等操作即可. 正常工作中不管是测试人员或者开发人员,一般数据库的管理员(测试负责人或者开发负责 ...

  6. [C++]C++ STL库函数大全

    #include <assert.h> //设定插入点 #include <ctype.h> //字符处理 #include <errno.h> //定义错误码 # ...

  7. Java初学者作业——编写Java程序,在控制台中输入一个数字,要求定义方法实现找出能够整除该数字的所有数字。

    返回本章节 返回作业目录 需求说明: 编写Java程序,在控制台中输入一个数字,要求定义方法实现找出能够整除该数字的所有数字. 实现思路: 定义方法findNums(),用于实现查找所有能够整除指定数 ...

  8. CSS基础 列表相关的属性的使用

    1.无序列表:就是不需要排列顺序的情况,用无序列表 语法结构:<ul> <li></li> <li></li> </ul> 特点 ...

  9. .NET C#教程初级篇 1-1 基本数据类型及其存储方式

    .NET C# 教程初级篇 1-1 基本数据类型及其存储方式 全文目录 (博客园).NET Core Guide (Github).NET Core Guide 本节内容是对于C#基础类型的存储方式以 ...

  10. select 1 from 是什么意思?有什么作用?

    参考:https://www.douban.com/note/518373959/ 一.select 1 from 的作用1.select 1 from mytable 与 select anycol ...