多态

  • 多态的概述和实现
  • 多态成员的特点
  • 多态中的向上转型和向下转型
  • 多态的优点和缺点

多态的概述和实现

  • 概念:多态是同一个行为具有不同表现形式或形态的能力,多态性是对象多种表现形式和体现。
  • 多态的前提:
    • 子父类的继承关系或子类实现父类接口
    • 必须有方法的重写
    • 父类引用指向子类对象
package com.itheima;/*** @author 11137_yyss3t3* 多态的前提:*  子父类的继承关系*   方法的重写*  父类引用指向子类对象*/
public class Demo1_1 {public static void main(String[] args) {Cat cat = new Cat();cat.eat();//父类引用指向子类对象Animal a = new Cat();a.eat();}
}/*** @author 11137_yyss3t3*父类,动物类*/
class Animal{public void eat() {System.out.println("吃东西");}
}/*** @author 11137_yyss3t3*子类猫继承了动物类并且重写了eat()方法*/
class Cat extends Animal{@Overridepublic void eat() {System.out.println("猫吃鱼");}
}
输出的结果为:
猫吃鱼
猫吃鱼

多态成员的特点

  • 成员变量的特点:上代码
package com.itheima;/*** @author 11137_yyss3t3* 多态的成员特点:*        成员变量:编译看左边,运行看左边*         成员方法*       静态方法**/
public class Demo1_2 {public static void main(String[] args) {Dad dad = new Kid();System.out.println(dad.num);}
}class Dad{int num = 20;
}
class Kid extends Dad{int num = 10;
}
输出结果为:20

父类引用指向子类对象,父亲类和儿子类中都有成员变量,变量不像方法一样有重写,变量是没有重写的概念的,所以运行的是父类方法的成员变量。如果父类中没有这个成员变量,程序会出现编译错误。
多态中成员变量的特点是:编译看左边,运行也看左边

  • 成员方法的特点
package com.itheima;/*** @author 11137_yyss3t3* 多态的成员特点:*        成员变量*       成员方法:编译看左边,运行看右边*         静态方法**/
public class Demo1_2 {public static void main(String[] args) {//父类引用指向子类对象Dad dad = new Kid();dad.method();}
}class Dad{public void method() {System.out.println("我是父类方法");}
}
class Kid extends Dad{public void method() {System.out.println("我是子类方法");}
}
输出的结果为:我是子类方法

因为成员方法是可以重写的,所以会执行子类的方法。但是如果父类中没有method()方法,编译器会报错。
总结:编译看左边,运行看右边

  • 静态方法的特点
package com.itheima;/*** @author 11137_yyss3t3* 多态的成员特点:*        成员变量*       成员方法*       静态方法:编译看左边,运行看左边**/
public class Demo1_2 {public static void main(String[] args) {//父类引用指向子类对象Dad dad = new Kid();dad.method();}
}class Dad{public static void method() {System.out.println("我是父类静态方法");}
}
class Kid extends Dad{public static void method() {System.out.println("我是子类静态方法");}
}
输出结果是:我是父类静态方法

分析:使用变量去调用静态方法,其实相当于变量类型的类名去调用,也就是Dad.method(),所以运行的是父类里面的静态方法。如果父类没有静态方法,编译报错。
总结:编译看左边,运行看左边

多态中的向上转型和向下转型

  • 向上转型
package com.itheima;/*** @author 11137_yyss3t3* 多态的向上转型和向下转型*/
public class Demo1_3 {public static void main(String[] args) {//父类引用指向子类对象,其实这就是向上转型Animal01 a = new Dog();a.eat();}
}
class Animal01 {public void eat() {System.out.println("吃东西");}
}class Dog extends Animal01{@Overridepublic void eat() {System.out.println("狗吃骨头");}public void swim() {System.out.println("狗刨");}
}
输出结果是:狗吃骨头

看上面代码狗类还有一个自己特有的方法游泳,现在是找不到子类的swim()方法的。如何才能运行swim()方法呢?

  • 向下转型
package com.itheima;/*** @author 11137_yyss3t3* 多态的向上转型和向下转型*/
public class Demo1_3 {public static void main(String[] args) {//父类引用指向子类对象,其实这就是向上转型Animal01 a = new Dog();Dog d = (Dog)a;//向下转型d.swim();}
}
class Animal01 {public void eat() {System.out.println("吃东西");}
}class Dog extends Animal01{@Overridepublic void eat() {System.out.println("狗吃骨头");}public void swim() {System.out.println("狗刨");}
}
输出结果:狗刨

多态的优点和缺点

  • 缺点:父类引用无法直接访问子类特有成员
  • 优点:
    • 可以提高可维护性
    • 提高可扩展性

多态的概念,特点和优缺点相关推荐

  1. C++中多态的概念和意义

    文章目录 1 C++中多态的概念和意义 1.1 函数重写回顾 1.2 多态的概念 1.3 多态的意义 1.4 静态联编和动态联编 2 特殊的虚函数 2.1 构造函数能成为虚函数吗 2.2 析构函数能成 ...

  2. Java:多态的概念和案例实现

    一.多态的概念 多态性是指同一个操作作用于某一类对象,可有不同的解释,产生不同的执行结果 多态存在的三个必要条件         需要存在继承或实现关系         同样的方法调用而执行不同的操作 ...

  3. 多态的概念、对象上下转型、多态的应用、异常(异常概念、异常分类、java异常处理机制、try...catch...finally、throw和throws、自定义异常)

    多态的概念: 多态性是指同一个操作作用于某一类对象,可以有不同的解释,产生不同的执行结果. 多态存在的三个必要条件: ① 需要存在继承或实现关系 ② 同样的方法调用而执行不同的操作.运行不同代码(重写 ...

  4. 【C++深度剖析教程27】多态的概念与意义

    今天来学习一个新的概念,多态!!!多态在C++编程中具有重要的地位与意义,是面向对象的一个重要思想! 加qq1126137994一起学习更多技术~ 1.问题引入 父类与子类之间具有赋值兼容性; *子类 ...

  5. Java 中多态的概念以及前提条件

    多态的概念  * 一个事物在不同时刻的体现(堆内存中对象形式)  * 多态的前提条件:  * 1)必须有继承关系(继承的好处第三点作为多态的前提条件)  *     如果没有继承谈不上多态  * 2) ...

  6. 多态的概念,多态的原理,多态解决什么问题

    目录 一.多态能解决什么问题 二.多态的概念 三,多态的原理 一.多态能解决什么问题 问题:通过基类指针只能访问派生类的成员变量,不能访问派生类的成员函数 (包括析构函数也不能访问)----(这也是为 ...

  7. Java多态的概念、优点和用法

    1. 多态的概念 Java中面向对象有三大特性:封装.继承和多态.         Java中的多态是什么,表现在哪里?         允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象 ...

  8. java多态的概念_java中多态是什么?概念详解

    对于java中的多态你是怎样理解的呢?很多人表示,自己对于多态的概念不是很清楚,那么下面就让我们一起来详细的了解一下吧. 1.什么是多态? 多态简单的来说就是一种事物的多种存在形态. 在面向对象语言当 ...

  9. java中的多态的概念_java中多态的概念

    多态的概念 多态==晚绑定. 不要把函数重载理解为多态. 因为多态是一种运行期的行为,不是编译期的行为. 多态:父类型的引用可以指向子类型的对象. 比如 Parent p = new Child(); ...

最新文章

  1. java分布式锁解决方案 redisson or ZooKeeper
  2. 姿态迁移CoCosNet v2
  3. 网络部署加实验步骤( 续)
  4. 算法系列之赫夫曼树的精解【构造流程及原理分析】
  5. 原生js实现canvas气泡冒泡效果
  6. SoundStream VS Lyra: 谷歌今年新推出的两款AI音频编解码器有何不同?
  7. 【渝粤教育】国家开放大学2019年春季 0408-22T管理学基础 参考试题
  8. ASP.NET Core 源码学习之 Logging[3]:Logger
  9. dbscan算法c语言实现,用C++实现DBSCAN聚类算法
  10. C\C++不经意间留下的知识空白------const使用
  11. .rpt文件内容读取java_Java 中读取文件内容的 n 中方式
  12. 科研福利!北京超算获AI Perf500总量份额第一,200元卡时免费领取
  13. 湖北校园天翼飞young使用路由器上网
  14. matlab无法复制图形到剪切板,cad图纸无法复制到剪贴板如何解决
  15. mysql 下 计算 两点 经纬度 之间的距离 含具体sql语句
  16. 微信小程序——获取用户的运动步数
  17. 数据库(设计与应用)
  18. navicat prenium如何只显示oracle用户自己的表空间
  19. vue2和vue3的参数接受方式以及vue中url参数解码
  20. 关灯游戏c语言,关灯游戏 Lights out (一)(极速求解)

热门文章

  1. 酷我音乐linux版本,酷我音乐盒的 Gtk/Linux 实现 – v2.5 版本发布
  2. Kubernetes容器编排引擎
  3. 【shadertoy】线性动态模糊的实现 Analytical Motion Blur
  4. Codeforces 1091F New Year and the Mallard Expedition
  5. Python:Excel自动录入、Excel表格快速合并(附有源代码)
  6. STM32G4外设之GPIO
  7. java工具:通过文件头的魔数判断文件类型
  8. 用arduino uno的IIC读取JY901角度传感器的数据
  9. Mybatis源码基础解析
  10. 栅栏加密解密的分析和实现