多态

一、多态的定义:

一个对象拥有多种形态,这就是对象的多态性。也就是说多态针对的是对象。多态的前提是接口和继承(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. javaScript 基础知识汇总 (十二)

    1.属性的标志和描述符 属性的标志 对象属性除value外还有三个特殊属性,即标志 writable ----如果为true,则可以修改,否则它只是只读的. enumerable ----如果为tru ...

  2. 使用C#+EmguCV处理图像入门(一)

    首先我们先了解一下该库的一些相关信息 OpenCV(Open Source Computer Vision Library)是一个(开源免费)发行的跨平台计算机视觉库,可以运行在Linux.Windo ...

  3. 告别炼丹,Google Brain提出强化学习助力Neural Architecture Search | ICLR2017

    论文为Google Brain在16年推出的使用强化学习的Neural Architecture Search方法,该方法能够针对数据集搜索构建特定的网络,但需要800卡训练一个月时间.虽然论文的思路 ...

  4. xpath模块使用

    xpath模块使用 一.什么是xml(百度百科解释如下) 可扩展标记语言,标准通用标记语言的子集,简称XML.是一种用于标记电子文件使其具有结构性的标记语言. 在电子计算机中,标记指计算机所能理解的信 ...

  5. 两片74门实现的双边沿D触发器

    最近一个项目需要时钟上升沿和下降沿都可以触发的D触发器,但并没有找到符合要求的商品IC.也去看了一些文献,但都是给的示意图然后用分立元件实现的(应该是准备做成IC).这里给出一种最少2个IC就能搭出来 ...

  6. 图-搜索-BFS-DFS-126. 单词接龙 II

    2020-03-19 13:10:35 问题描述: 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序 ...

  7. 使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

    使用Jenkins与Docker持续集成与发布NetCore项目(教程一) 原文地址:https://www.cnblogs.com/Jackyye/p/12588182.html 基本环境 该教程的 ...

  8. leetcode 签到 面试题40. 最小的k个数

    题目 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 1: 输入:arr = [3,2,1], k = ...

  9. 最便捷的神经网络可视化工具之一--Flashtorch

    前言 几周前,我在AnitaB.org组织的Hopperx1 London上发表了演讲作为伦敦科技周的一部分. 在演讲结束后,我收到了热烈的反馈,所以我决定写一个稍微长一点的演讲版本来介绍FlashT ...

  10. 关于TensorFlow九件你非知不可的事

    来源 | Hackernoon 译者 | Revolver 前些天我参加了7 月24 日在美国旧金山举行的Google Cloud Next 2018 大会,其中的一个演讲( What's New w ...