多态

一、多态的定义:

一个对象拥有多种形态,这就是对象的多态性。也就是说多态针对的是对象。多态的前提是接口和继承(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. 029.核心组件-Controller Manager

    一 Controller Manager原理 1.1 Controller Manager概述 一般来说,智能系统和自动系统通常会通过一个"控制系统"来不断修正系统的工作状态.在K ...

  2. 从火箭发场景来学习Java多线程并发闭锁对象

    从火箭发场景来学习Java多线程并发闭锁对象 倒计时器场景 在我们开发过程中,有时候会使用到倒计时计数器.最简单的是:int size = 5; 执行后,size—这种方式来实现.但是在多线程并发的情 ...

  3. ASP.net MVC 构建layui管理后台(构造基础仓储)<1>

    本文章为ASP.net MVC 构建layui管理后台,第一篇. 使用EF+ado.net 实体数据模型模式进行底层的数据库连接. 在项目添加一个类库Model 在类库Model上添加一个ado.ne ...

  4. ajax4

    用jquery实现json jquery.ajax([settings]) type类型使用“POST”或者“GET”,默认使用get URL:发送请求地址 data:是一个对象,连同请求发送到服务器 ...

  5. 免费开源的 HelloDjango 系列教程,结束还是开始?

    作者:HelloGitHub-追梦人物 我们已经成功地开发了一个功能比较完备的个人博客,是时候来总结一下我们的工作了.博客系列完整的源代码地址: https://github.com/HelloGit ...

  6. vuex 业务使用

    1 创建变量 cityVuex.js export default { state: { cityArr: [] }, mutations: { setCityArr (state, arr) { s ...

  7. MVC设计模式简介

    刚刚学习了MVC相关知识,在这里进行一下总结MVC设计模式提高了Java开发中的代码可读性,提高了开发效率,实乃开发利器 1在MVC中由客户端发送一个带参数的请求,经过servlet处理后做出相应的处 ...

  8. abp(net core)+easyui+efcore实现仓储管理系统——入库管理之六(四十二)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  9. php解析配置文件

    php解析配置文件 标签(空格分隔): php .ini格式 ![](https://img2020.cnblogs.com/blog/1458583/202003/1458583-202003301 ...

  10. WeChat 搭建过程

    [被动回复消息] 1.创建项目(基于MyEclipse + Tomcat 7 编写):wechat 2.导入jar包(用于解析xml):dom4j-1.6.1.jar,xstream-1.3.jar ...