面向对象三大特性之多态(polymorphism)
2018-03-10 16:46
239 查看
1、多态的基本概念
多态是Java面向对象编程中最重要的特性之一,比封装和继承稍微难一点,所谓多态其实就是指对象具有多种形态,对象可以存在不同的形式。因为有jvm虚拟机,所以在编译时不用考虑真实的对象,运行时才考虑,换句话说就是程序的最终状态只有在执行过程中才被决定而不是在编译期间就决定了的。
举个简单的栗子:写一个Animal类、Dog类、Cat类,再写一个测试类TestDemo
没有使用多态的TestDemo类:
使用了多态的TestDemo类:
我们知道引用变量(对象)的有两种类型:一是编译时类型,由声明的类型决定;二是运行时类型,由实际对应的对象类型决定。通过上面的代码不难发现,编译时类型必须是运行时类型的父类或者相同,而当编译时类型是运行时类型的父类的时候,即Animal a1 = new Dog() ; 多态就产生了。
2、多态产生的三个必要条件
要有继承;
要有方法重写;
父类引用指向子类对象 。
3、多态的优点
使用多态可以利用父类类型屏蔽子类之间的差异,所有的子类对象都可以当父类对象来用,一个父类类型的引用可能指向的是一个子类对象,提高代码的灵活性和通用性。
多态是Java面向对象编程中最重要的特性之一,比封装和继承稍微难一点,所谓多态其实就是指对象具有多种形态,对象可以存在不同的形式。因为有jvm虚拟机,所以在编译时不用考虑真实的对象,运行时才考虑,换句话说就是程序的最终状态只有在执行过程中才被决定而不是在编译期间就决定了的。
举个简单的栗子:写一个Animal类、Dog类、Cat类,再写一个测试类TestDemo
public class Animal { public void eat() { System.out.println("动物需要吃东西!"); } }
class Dog extends Animal { public void eat(){ System.out.println("狗狗吃骨头!"); } }
class Cat extends Animal { public void eat() { System.out.println("猫吃鱼"); } }
没有使用多态的TestDemo类:
Public class TestDemo{ public static void main(String[] args){ Dog d = new Dog(); d.eat(); Cat c = new Cat(); c.eat(); } }
使用了多态的TestDemo类:
Public class TestDemo{ public static void main(String[] args){ Animal a1 = new Dog(); //父类引用指向子类对象 a1.eat(); Animal a2 = new Cat(); a2.eat(); } }
我们知道引用变量(对象)的有两种类型:一是编译时类型,由声明的类型决定;二是运行时类型,由实际对应的对象类型决定。通过上面的代码不难发现,编译时类型必须是运行时类型的父类或者相同,而当编译时类型是运行时类型的父类的时候,即Animal a1 = new Dog() ; 多态就产生了。
2、多态产生的三个必要条件
要有继承;
要有方法重写;
父类引用指向子类对象 。
3、多态的优点
使用多态可以利用父类类型屏蔽子类之间的差异,所有的子类对象都可以当父类对象来用,一个父类类型的引用可能指向的是一个子类对象,提高代码的灵活性和通用性。
相关文章推荐
- 1.面向对象三大特性,封装,继承,多态
- 面向对象语言三大特性之多态
- 面向对象三大特性之一 多态
- 面向对象三大特性之多态(三)
- 面向对象的三大特性(封装、继承和多态)
- 面向对象三大特性——封装、继承、多态
- java中面向对象思想和三大特性的理解
- 黑马程序员----面向对象设计的封装、继承、多态特性
- 面向对象三大基本特性,五大基本原则
- 面向对象三大基本特性,五大基本原则
- 面向对象三大特性五大原则 + 低耦合高内聚
- 黑马程序员_面向对象思想概述和三大特性之一——封装
- 面向对象概述及三大特性
- 面向对象三大基本特性和五大基本原则
- 本文是笔者根据数据库编程经验,利用C++语言的模板、继承、授权、多态等面向对象特性,借鉴命令模式,实现了对象在关系数据中的存储,降低应用系统与数据库之间的耦合,提高开发效率。
- C# 面向对象特性 封装 继承 多态
- 面向对象三大基本特性,五大基本原则
- 面向对象三大特性之封装
- 面向对象三大基本特性,五大基本原则
- Java面向对象(二)-三大特性