多态

一、多态的定义:

一个对象拥有多种形态,这就是对象的多态性。也就是说多态针对的是对象。多态的前提是接口和继承(C++中实行多继承,不存在接口)。

二、多态在代码中的形式:

父类 对象名 = new 子类();

或者

接口 对象名 =  new 实现类();

三、成员方法使用规则:

右边new的是谁,便使用谁的成员方法(编译看左,运行看右)。

四、成员变量使用规则:

①直接通过对象名访问成员变量:

看等号左边是谁,则优先用谁。没有则向上找。

②间接通过成员方法访问成员变量:

看该方法属于谁,则优先用谁,没有则向上找。

五、对象的转型:

①向上转型

(1)其实就是多态的写法,左父右子。向上转型一定是安全的。

(2)对象无法调用子类特有方法。

②向下转型

(1)其实就是还原过程(只能还原为原来类别)。格式为:

子类 对象名 = (子类)父类对象

(2)转型很可能会失败(本来是猫,向上转为动物后,又向下转型为狗)。

(3)如何判断对象本来属于哪个类(子类)。

对象 instanceof 类 ==》 返回一个布尔值。

六、多态的注意事项:

  1. 只有成员方法才能覆盖重写,成员变量不可以覆盖重写。
  2. 父类如果要调用子类的方法必须要有同名方法。
  3. 多态情况下,子父类存在着同名的成员变量时,默认会访问父类的成员变量。
  4. 多态情况下,子父类存在着同名的非静态函数时,默认是访问子类的成员函数。
  5. 多态情况下,子父类存在着同名的静态函数时,默认是访问父类的成员函数。
  6. 多态情况下,不能访问子类特有的成员。

七、代码

Animal类:

package com.lanyue.day08;

public abstract class Animal {

public static String INFO = "动物界";

public abstract void eat();

    public abstract void work();

}

Dog类:

package com.lanyue.day08;

public class Dog extends Animal{

@Override

    public void eat() {

System.out.println("狗吃骨头");

    }

@Override

    public void work() {

System.out.println("狗能看家");

    }

}

Cat类:

package com.lanyue.day08;

public class Cat extends Animal{

@Override

    public void eat() {

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

    }

@Override

    public void work() {

System.out.println("猫能抓老鼠");

    }

public void catPlay(){

System.out.println("猫喜欢玩");

    }

}

运行类:

package com.lanyue.day08;

public class Demo {

public static void main(String[] args) {

Dog dog = new Dog();

        dog.eat();

        dog.work();

Cat cat = new Cat();

        cat.eat();

        cat.work();

Animal animal = new Cat();

        animal.eat();

        animal.work();

if(animal instanceof Cat){

((Cat) animal).catPlay();

            System.out.println("猫属于" + Animal.INFO);

        }

    }

}

Java第十天,多态的更多相关文章

  1. Java基础十二--多态是成员的特点

    Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...

  2. java提高篇之理解java的三大特性——多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  3. Java基础学习小记--多态

    题外话:总结了多年的学习心得,不得不说,睡眠是一个学习者的必需品!所谓"早起毁一天"不是没有道理哪,特别对Coders来说,有几天不是加班到夜里.好吧,我承认对于初学Java的我, ...

  4. JAVA三大特性之多态

    面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据 ...

  5. Java三大特征之多态(三)

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  6. 【转】java提高篇之理解java的三大特性——多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  7. JAVA 面向对象中的多态

    多态是继封装.继承之后,面向对象的第三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一个 ...

  8. Java面试题,Java三大特性之一——多态的理解

    首先我们知道Java是一门面向对象的语言 面向对象三大特性,封装.继承.多态. 封装.继承.多态 ↓ 无论是学习路线,还是众人的口语习惯,都是按照这个这样进行排序,这是有原因的.因为封装好了才能继承, ...

  9. JAVA第十周《网络编程》学习内容总结

    JAVA第十周<网络编程>学习内容总结 学习内容总结 1.初听到网络编程四个字可能会觉得很困难,实际上网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据,把数据发送到指定的位置, ...

  10. Java基础十--接口

    Java基础十--接口 一.接口的定义和实例 /* abstract class AbsDemo { abstract void show1(); abstract void show2(); } 8 ...

随机推荐

  1. 【Weiss】【第04章】AVL树例程

    普通的二叉搜索树可能会由于数据不平均.删除产生高度差等原因,使树倾向于不平衡生长,导致操作慢于O(NlogN). 为应对此现象,将搜索.删除.插入的最坏时间也控制在O(NlogN)上,产生了平衡二叉树 ...

  2. BigDecimal介绍及BigDecimal实现四舍五入

    BigDecimal介绍及BigDecimal实现四舍五入 BigDecimal是什么? 我们知道float最大精度是7-8位有效数字,而double的最大精度是16-17位有效数字,那么大于16位的 ...

  3. 搭建DVWA漏洞环境

    DVWA是一款开源的渗透测试漏洞练习平台,其中内含XSS.SQL注入.文件上传.文件包含.CSRF和暴力破解等各个难度的测试环境. 搭建步骤: 1.在Windows系统中安装WAMP 下载地址:htt ...

  4. vue后台管理系统权限处理

    vue后台管理系统权限 1.权限问题:用户和管理员进入管理系统看到的模块是不一样的,管理员看的的要比用户看到的多.需要用到动态加载路由,router.addRouters()来动态的挂载路由 // 1 ...

  5. 洛谷1363 幻象迷宫dfs

    题目网址:https://www.luogu.com.cn/problem/P1363 迷宫是无限多块地图拼接而成的,问是否可以在迷宫中走无限远.解决方案是dfs,走出初始地图之后的位置映射到原位置( ...

  6. ThinkPHP的几种路由形式总结

    本篇文章总结了ThinkPHP的几种路由形式,分别是普通模式.PATHINFO.REWRITE和兼容模式,希望对各位学习thinkphp的朋友有帮助! thinkphp官方文档里有详细的说明: Thi ...

  7. Java attack - Java 特性

    Java 语言平台版本 l  J2SE (Java 2 Platform Standard Edition) 标准版 是为开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础,可以完成 ...

  8. 解决在linux下的eclipse syso Alt+/无法使用

    1.绑定快捷键 2.配置proposal

  9. 常见排序算法总结分析之选择排序与归并排序-C#实现

    本篇文章对选择排序中的简单选择排序与堆排序,以及常用的归并排序做一个总结分析. 常见排序算法总结分析之交换排序与插入排序-C#实现是排序算法总结系列的首篇文章,包含了一些概念的介绍以及交换排序(冒泡与 ...

  10. OpenCV-Python 交互式前景提取使用GrabCut算法 | 三十五

    目标 在本章中, 我们将看到GrabCut算法来提取图像中的前景 我们将为此创建一个交互式应用程序. 理论 GrabCut算法由英国微软研究院的Carsten Rother,Vladimir Kolm ...