关键词:
多态的概述:
多态是继封装、继承之后,面向对象的第三大特性。
生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如飞的动作,昆虫、鸟类和飞机,飞起来也是不一样的。可见,同一行为,通过不同的事物,可以体现出来的不同的形态。多态,描述的就是这样的状态。
多态的条件
1.继承
2.方法的重写 (为了让多态有意义)
3.父类的引用指向子类的对象
多态的体现
父类类型 变量名 = new 子类对象; 变量名.方法名();
public abstract class Animal public abstract void eat();
定义子类:
class Cat extends Animal public void eat() System.out.println("吃鱼"); class Dog extends Animal public void eat() System.out.println("吃骨头");
定义测试类:
public class Test public static void main(String[] args) // 多态形式,创建对象 Animal a1 = new Cat(); // 调用的是 Cat 的 eat a1.eat(); // 多态形式,创建对象 Animal a2 = new Dog(); // 调用的是 Dog 的 eat a2.eat();
public abstract class Animal public abstract void eat();
定义子类:
class Cat extends Animal public void eat() System.out.println("吃鱼"); class Dog extends Animal public void eat() System.out.println("吃骨头");
定义测试类:
public class Test public static void main(String[] args) // 多态形式,创建对象 Cat c = new Cat(); Dog d = new Dog(); // 调用showCatEat showCatEat(c); // 调用showDogEat showDogEat(d); /* 以上两个方法, 均可以被showAnimalEat(Animal a)方法所替代 而执行效果一致 */ showAnimalEat(c); showAnimalEat(d); public static void showCatEat (Cat c) c.eat(); public static void showDogEat (Dog d) d.eat(); public static void showAnimalEat (Animal a) a.eat();
多态成员的访问特点:
访问成员变量: 编译看左边,运行看左边
访问成员方法:
非静态成员方法: 编译看左边,运行看右边
静态成员方法: 编译看左边,运行看左边
记忆: 只有非静态成员方法才会编译看左边,运行看右边,其他的都是编译看左边,运行看左边
多态的好处
使用父类类型作为方法的参数,可以接收该类所有的子类对象
tips: 如果方法的参数是Object类型,那么就可以接收任意类的对象
多态的弊端
无法调用子类特有的方法
(关于如何解决多态的弊端,可以看下一章引用类型的转换)
面向对象三大特性之多态与多态性(代码片段)
一、多态‘‘‘多态:同一事物的多种形态‘‘‘#文件的多种形态:classFile:defclick(self):passclassTextFile(File):defread(self):print(‘文本文件双击可以查看内容‘)classExeFile(File):defexe(self):print(‘可执行文件双击可以执行‘)file1=TextFile()file2... 查看详情
java面向对象之多态(代码片段)
...态的实现3.小结 1.多态的含义 多态,是Java面向对象的三大特性之一,使用之地特别广泛。那么什么是多态呢?多态是同一个行为具有多个不同表现形式或形态的能力。比如炒菜这个行为在不同厨师身上会产... 查看详情
java面向对象之多态(代码片段)
...态的实现3.小结 1.多态的含义 多态,是Java面向对象的三大特性之一,使用之地特别广泛。那么什么是多态呢?多态是同一个行为具有多个不同表现形式或形态的能力。比如炒菜这个行为在不同厨师身上会产... 查看详情
java第五章:面向对象(oop)三大特性之多态
多态(把代码写活,提高代码的扩展性和可维护性)生活中的多态:同一种物质,因不同的环境展现不同的形态(水:气态,液态,固态/碳12:金刚石,石墨)程序中的多态:同一个“接口”因不同的实现,而执行不同的操作(... 查看详情
java面向对象三大特征之继承和多态(代码片段)
...转型多态代码案例总结前言 上一篇博客我们介绍了Java面向对象思想以及三大特征之一的封装。本文将介绍面向对象三大特征的剩下两个特征——继承和多态,我个人认为继承和多态是三个特征中比较重要且理解起来稍有... 查看详情
面向对象三大特性之封装与多态(代码片段)
一、封装最主要的作用:隐藏对象的属性和实现细节,仅对外提供公共访问方式封装原则将不需要对外提供的内容都隐藏起来把属性都隐藏,提供公共方法对其访问在python中用双下划线开头的方式将属性隐藏起来(设置成私有的... 查看详情
java面试题详解一:面向对象三大特性(代码片段)
一,多态:1.面向对象四大基本特性:抽象,封装,继承,多态抽象,封装,继承是多态的基础。多态是抽象,封装,继承的表现。2.什么是多态不同类的对象对同一消息作出不同的响应叫做多态3.多态的作用简单来说:解藕。详... 查看详情
面向对象三大特性(代码片段)
面向对象三大特性1.面向对象的三大特性:继承,封装,多态封装:将一堆代码或者数据等放到一个空间中,并且可以使用多态:同一个对象,多种形态.(python默认支持多态)封装:根据职责将属性和方法封装到一个抽象的类中继承:实现代码... 查看详情
大数据必学java基础(四十一):面向对象三大特性之一多态(polymorphism)(代码片段)
文章目录面向对象三大特性之一多态(Polymorphism)一、案例代入二、向下转型,向上转型 三、简单工厂设计模式面向对象三大特性之一多态(Polymorphism)多态跟属性无关,多态指的是方法的多态,而不是属性的多态一、案... 查看详情
第十篇:面向对象系列之三大特性(代码片段)
本篇主要介绍面向对象的三大特性及封装、继承、多态。一、封装 第一层意义上的封装: 封装:从封装本身的理解,装--将一系列东西(苹果、梨子、香蕉等)一股脑的塞进一个盒子内,而封--自然就是密封,即... 查看详情
面向对象之三大特性
面向对象的三大基本特征 封装(封装方法)——代码复用,屏蔽细节。 继承extends(类与类之间的一种关系)——代码复用,功能上的拓展。当一个子类继承了父类,就自动拥有了父类的所有成员变量。一个子类只能有... 查看详情
面向对象的三大特征之三——多态
...面的内容有过详细的记录,即重复调用的代码块—方法和面向对象的特性之二—继承。二、对象的多态性——引用类型转换。1.向上转型(自动转型)——子类对象自动转换为父类对象。1classFather2{3publicvoidspeak()4{5System.out.println( 查看详情
面向对象三大特性-多态的思考(代码片段)
无论是python语言,还是java语言都有着面向对象的特性,而面向对象三大特性(封装,继承,多态)中封装和继承是比较容易理解的,多态的话自己一直处于一个似懂非懂的状态。比如一些概念性的东西: 多态的要点:&n... 查看详情
java面向对象(oop)--面向对象三大特性之一:多态(多态方法绑定instanceof和类型转换(重写重载和多态的关系))(代码片段)
1.多态1.1认识多态多态性是OOP中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性... 查看详情
java三大特性之---多态
面向对象编程有三大特性:封装、继承、多态。封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而言它的内部细节是隐藏的,暴露给外界的只是它的访问方法。继承是为... 查看详情
面向对象三大特征之多态(代码片段)
多态1程序中的多态;声明父类,实例化子类; 要建的类 对动物喂食packagecom.lv.tai;publicclassPerson//给动物喂食publicvoidfeed(Dogdog)System.out.println("喂食");dog.eat();publicvoidfeed(Birdbird)System.out.println("喂食");bird.eat();publicvoidfeed(Sn... 查看详情
浅谈java三大特性之多态
...,可以通俗得去理解,多种形态,多种姿态。。。那么在面向对象的程序设计中,多态是指什么?Java引用变量有两个类型;一个是编译类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋... 查看详情
面向对象语言三大特性之“多态”(代码片段)
目录 1.多态的概念1.1概念2.多态的定义及实现2.1多态的构成条件2.2虚函数 2.3虚函数的重写2.4C++11override和final 2.5重载、覆盖(重写)、隐藏(重定义)的对比 3.抽象类3.1概念3.2接口继承和实现继承 4.多态的原理4.1虚函数表 4.2... 查看详情