------ android培训、java培训、java基础学习技术总结、期待与您交流! ----------
多态:可以理解为一个事物具有多中体现的形态
人:男人、女人
动物:猫、狗
猫 mao=new 猫();
动物 dw=new 猫();
多态在对对象上的体现
函数也具有多态性
1.多态的体现
父类的引用指向了自己的子类对象
父类的引用也可以接收自己的子类对象
main函数是程序的调用者,相当于我们的客户端。
2. 多态的前提条件
必须是类与类之间有关系,要么继承,要么实现。
3.多态的好处
多态的出现大大的 提高了代码的拓展性
改写已经写好的类 违背了描述显示生活中事物的规律
实现了后期拓展性
4.多态的弊端
提高了拓展性,但是只能使用父类引用去访问父类中的成员
类型转型
1.向上转型
将子类类型自动提升为父类类型
2.向下转型
如果想要调用子类的特有方法时,可以把引用强制转型成子类引用
在强制转型时,不能将父类对象强转成子类对象,或者将其他对象转成该对象
多态至始至终都是子类对象在做变化
如何使用子类中特有的方法
向下转型
多态使用的注意事项
5.多态的应用
6.多态成员变量的特点
非静态函数的特点
编译时期参阅引用变量所属的类中是否有调用方法,如果有,编译通过;
如果没有,编译失败
在运行时期,参阅对象所属的类是否有调用方法
简单总结就是,成员函数在多态调用时,编译看左边,运行看右边。
静态成员函数的特点
无论编译和运行都参考左边(静态函数的覆盖在开发过程中不太会出现)
静态方法不需要调用对象中的变量,被存放在静态方法区
静态方法不参考左边的对象
静态绑定为静态绑定
非静态绑定为动态绑定
在多态中,成员变量的特点,无论是编译还是运行,
都参考左边(引用变量所属的类)。
示例1如下:
abstract class Animal { public abstract void eat(); } class Cat extends Animal { public void eat() { System.out.println("吃鱼"); } public void catchMouse() { System.out.println("抓老鼠"); } } class Dog extends Animal { public void eat() { System.out.println("啃骨头"); } public void kanjia() { System.out.println("看家"); } } class Pig extends Animal { public void eat() { System.out.println("吃饲料"); } public void gongdi() { System.out.println("拱地"); } } public class DuoTaiDemo { public static void main(String[] args) { // TODO Auto-generated method stub Animal an1 = new Cat(); Animal an2 = new Dog(); Animal an3 = new Pig(); function(an1); function(an2); function(an3); } public static void function(Animal an) { if (an instanceof Cat) { an.eat(); ((Cat) an).catchMouse(); } else if (an instanceof Dog) { an.eat(); ((Dog) an).kanjia(); } else if (an instanceof Pig) { an.eat(); ((Pig) an).gongdi(); } } }
示例2如下:
abstract class Student{ public abstract void study(); public void sleep(){ System.out.println("躺着睡!"); } } class Yure extends Student{ public void study(){ System.out.println("基础学习!"); } public void sleep(){ System.out.println("坐着睡!"); } } class Jiuye extends Student{ public void study(){ System.out.println("提升学习!"); } } public class DuotaiDemo2 { public static void main(String[] args) { doSome(new Yure()); doSome(new Jiuye()); } public static void doSome(Student stu){ stu.study(); stu.sleep(); } }
相关推荐
黑马程序员匠心之作 C++教程讲义,适合初学者,视频教程全程无废话
黑马程序员 - Java基础教学 - 08 - 面向对象(4)-多态.doc
1、面向对象都有哪些特性以及你对这些特性的理解12 1、 Java 中实现多态的机制是什么 1、 Java 中异常分为哪些种类13 2、 调用下面的方法,得到的
java 继承与多态应用 输出员工信息java 继承与多态应用 输出员工信息 代码实例
考程序员时学习C++的经典课件 全面阐述C++的类、对象、继承、多态、派生、模板及异常处理等C++基础 是C++初学者的必备课件。
本教程主要利用C++来实现一个基于多态的职工管理系统 公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号、职工姓名、职工岗位、以及职责 普通员工职责:完成经理交给的任务 经理职责:...
类的继承和多态 Ⅲ.Collection集合和Map集合的设计和API使用,以及集合的嵌套 Ⅳ.lambda表达式遍历集合,以及比较器comparator()匿名内部类的使用 V.使用Stream流操纵集合 功能: ①日志框架搭建、系统角色设计 ②...
此代码根据黑马程序员课程案例学习编写,如果想知道具体教程,欢迎大家去https://www.bilibili.com/video/BV1et411b73Z?p=2&spm_id_from=pageDriver 观看教材学习。 管理系统中需要实现的功能如下: 退出管理程序:...
java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc ...黑马程序员入学Java精华总结.pdf
java面试笔试题库java学习比较开发教程互联网公司面试资料大全合集: 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc ...黑马程序员入学Java精华总结.pdf
java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB“ 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc ...黑马程序员入学Java精华总结.pdf
包含了c++的基本语法,类与对象知识如封装,继承,多态,模板编程,异常处理,文件操作等知识。本资源根据黑马c++视频,运行完全通过,并整理到同一个工程文件下。
3. 多态、内部类、常用API 4. 日期与时间、日期类、包装类、正则表达式、Arrays 类、常见算法、Lambda 表达式 5. Collection集合、数据结构、List集合、泛型、Set集合、可变参数 6. 集合工具类Collections、Map集合...
Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。