多态

——父类或者接口的引用指向自己的子类对象。

优点:提高代码的扩展性

弊端:前期建立父类的引用,虽然可以接受后期所有该类的子类的对象。但是只能使用父类中的功能,不能使用子类特有的功能,因为前期的程序无法知道后期的子类的特有内容的。但是前期的程序可以使用子类覆盖了父类的方法的内容。

前提:

1. 必须存在着继承关系。

2. 通常使用覆盖操作

例子:

package com.dragon.src;

/**

* 抽象类

* @author DRAGON

*

*/

abstract class Animal

{

abstract void eat();

}

class Dog extends Animal

{

@Override

void eat() {

System.out.println("小狗在吃饭");

}

public void Home(){

System.out.println("小狗在看门");

}

}

class Cat extends Animal{

@Override

void eat() {

System.out.println("小猫在吃鱼");

}

public void catchMouse(){

System.out.println("小猫在捉老鼠");

}

}

class Pig extends Animal{

@Override

void eat() {

System.out.println("猪在吃饲料");

}

public void gongDi() {

System.out.println("猪拱地");

}

}

public class DuotaiDemo {

/**

* @param args

*/

public static void main(String[] args) {

Dog dog = new Dog();

//dog.eat();

Cat cat = new Cat();

//cat.eat();

Pig pig = new Pig();

//使用多态性,都属于animal

eatmethod(dog);

eatmethod(cat);

eatmethod(pig);

/***********向上转型*************/

//父类应用指向子类的对象

//animal引用可以指向任意的子类型的对象

//但animal引用只能调用Animal中的方法

Animal animal = new Dog();//

//好处:提高了扩展性

//局限:只能使用父类中的方法

//这种提升可以限制对子类对象的操作

/***********向上转型*************/

Dog dog2 = (Dog)animal;//变成子类

//优点:可以使用子类的特有方法

//弊端:如果类型转换错误,会出现运行异常

//应用情景:

//当需要对程序进行扩展,或者限定对对象的方法时,可以使用向上转型,操作其父类型

//当要使用子类的特有的内容是,就需要向下转型,转型前一定要判断,否则内容容易出现异常

//注意:在整个转型过程中,自始至终都是一个子类对象在做类型的变化而已,千万别把父类对象转成子类型,这是不可能的

}

//共性功能

public static void eatmethod(Animal animal){

animal.eat();

}

//转型判断

public static void method(Animal animal) {

//向下转型前的健壮性进行类型判断

if(animal instanceof Cat){

Cat cat = (Cat)animal;

cat.catchMouse();

}else if(animal instanceof Dog){

Dog dog = (Dog)animal;

dog.Home();

}else if(animal instanceof Pig){

Pig pig = (Pig)animal;

pig.gongDi();

}

}

}

应用情景:

//当需要对程序进行扩展,或者限定对对象的方法时,可以使用向上转型,操作其父类型

//当要使用子类的特有的内容是,就需要向下转型,转型前一定要判断,否则内容容易出现异常

//注意:在整个转型过程中,自始至终都是一个子类对象在做类型的变化而已,千万别把父类对象转成子类型,这是不可能的

原理:在同一块堆内存块中,不同的引用对方法产生了不同的作用。

多态的出现在成员调用上的特点:

1.成员变量

编译时期:参考的是引用型变量所属的类中是否有调用的成员变量,如果有,编译通过,如果没有编译失败。

运行时期:调用的也是引用型变量所属类中的成员变量。

简单说:编译和运行都看等号的左边。

2.成员函数。

编译时期:参考的是引用型变量所属的类中是否有调用的方法。有,编译通过,没有编译失败。

运行时期:参考的是对象所属的类中是否有调用的方法,如果有运行子类自己的方法,如果没有就父类的方法。

简答说:编译时期看左边,运行时期看右边。因为函数有一个覆盖的特性。

非静态方法需要和当期运行的对象进行动态绑定,哪个对象调用了这个方法,这个方法就所属于哪个对象。就会运行哪个对象的中的方法。

3,静态函数。

编译时期:参考的是引用型变量所属的类中是否该方法。

运行时期:参考的也是引用型变量所属的类中的方法。

简单说:编译和运行都看左边。

因为静态方法是不所属于对象的,是所属于类的,

它会类加载的时候,静态的绑定到所属的类上。

java 面相,java学习17-面相对象(多态)相关推荐

  1. Java学习笔记类对象多态继承(下)

    面向对象(下) 1.类的继承 一.什么是继承,有什么用? 继承:在现实世界当中也是存在的,例如:父亲很有钱,几子不用努力也很有钱 继承的作用: 基本作用:子类继承父类,代码可以得到复用.(这个不是重要 ...

  2. 【0基础学java】教学日志:javaSE-面向对象6-面向对象前4章上机作业点评,主要涉及继承、封装、多态三个章节的内容

    目录 一.面向对象第一章上机作业参考答案(略) 二.面向对象第二章上机作业参考答案: 三.面向对象第三章上机作业参考答案: 1.上机练习1已在第三章博客中编写,请参考: 2.上机练习2 四.面向对象第 ...

  3. 《Java 2 实用教程》课程学习(17)——《Java 程序设计》实验指导书-校内实验教材

    ****大学 <Java程序设计> 实验指导书 编者:王* 潘** 肖* 杨** 主审:刘** ********学院信息科学系 2013年1月9日 前  言 <Java 程序设计实验 ...

  4. Java学习-17 正则表达式简述

    Java学习-17 正则表达式 1.什么是正则表达式? 正则表达式是构成搜索模式(search pattern)的字符序列. 当您搜索文本中的数据时,您可使用搜索模式来描述您搜索的内容. 正则表达式可 ...

  5. java学习之类与对象篇——奥特曼打小怪兽

    java学习之类与对象篇--奥特曼打小怪兽 初次接触Java,我们就被告知Java是一种面向对象的程序设计语言,那么什么是面向对象呢?什么又是对象呢?带着这些个疑问,我们开始了Java学习之旅. 1. ...

  6. Java快速入门学习笔记7 | Java语言中的类与对象

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  7. java学习--类与对象

    文章目录 java学习--类与对象 类的定义与对象的使用 类的私有成员的使用 java学习–类与对象 类的定义与对象的使用 类的定义与对象的使用 类的定义步骤: public 类名: //定义成员变量 ...

  8. Java 入门知识学习笔记 (类和对象)

    一.类和对象的定义及关系 1.类是同一类别对象的抽象定义:可以理解为是某一类具体对象的模子,确定对象将会拥有的特性,包括该类对象具备的属性和方法. 2.对象是对类的一种具体化的客观存在,是对类的具体实 ...

  9. Java面对对象(多态)

    Java面对对象(多态) 一,object类和toString Object 类|老祖宗类 ​ 是java 中所有类的父类 ​ 在java中的所有类都会直接或者间接的继承自Object类 ​ ​ to ...

最新文章

  1. 痛苦是能让人成长的,所以不要害怕遇到痛苦
  2. javabean属性的类型选择包装类还是基本数据类型
  3. WinForm组件开发:构造ImageButton控件
  4. mycncart之微店管理功能
  5. jquery获取下拉框的值并传递给后端处理
  6. [LeetCode]题解(python):086-Partition List
  7. 计算机学报在线阅读,面向目标检测与姿态估计的联合文法模型计算机学报.pdf...
  8. 自定义用户控件的使用
  9. Windows Server 2003网络配置与管理
  10. 名企面试官精讲典型编程题之C++篇
  11. 什么是Prettier?
  12. 神策分析 1.13 版本用户分群全新升级,为企业打磨­­­­­­­­­精细化运营基石
  13. 64qam星座图matlab,基于MATLAB的QAM 眼图和星座图
  14. php加skplayer,WordPress整合ckplayer(最新)
  15. 分站php源码,企业网站管理系统云优CMS v2.0.5 分站版
  16. 【5G会话管理】UE IP地址的管理
  17. 几种x-ray产生的原理
  18. 解决npm public提示403 Forbidden - PUT https://registry.npmjs.org/js-toolkit - You do not have permission
  19. 点云入门笔记(三):PCL基础以及PCL学习指南
  20. 一个模仿微信群聊的H5页面

热门文章

  1. [小技巧]C#中如何为枚举类型添加描述方法
  2. Microsoft AI - Custom Vision in C#
  3. 基于.NET CORE微服务框架 -谈谈surging的服务容错降级
  4. C#将引入可空的引用类型
  5. vue 2.6 插槽v-slot用法记录
  6. mysql sql语句书写之面试部分
  7. java的collections_Java中Collection和Collections的区别
  8. 如何在web api中使用SignalR
  9. Android之实现夸克浏览器书签和历史页面滑动时候右上角图标切换效果
  10. Android之Launcher分析和修改3——Launcher启动和初始化