多态

一、多态的定义:

一个对象拥有多种形态,这就是对象的多态性。也就是说多态针对的是对象。多态的前提是接口和继承(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. 使用Github Packages功能上传nuget包到Github

    前几天微软收购npm的新闻对于软粉来收很是振奋.微软收购npm很可能是为了加强Github Packages.目前Github,Typescript,VSCode,npm这些开源社区的重磅工具全部都在 ...

  2. *fetch(_, { call, put }) { --- generator

    effects: { *fetch(_, { call, put }) { const response = yield call(queryUsers); yield put({ type: 'sa ...

  3. C/C++、C#、JAVA(二):基本类型和转换操作

    基本类型和转换操作 数据类型 C语言中的基本类型如下. 类型 存储大小 值范围 char 1 字节 -128 到 127 或 0 到 255 unsigned char 1 字节 0 到 255 si ...

  4. 网络安全从入门到精通(第一章-2)快速自建web安全测试环境

    本文内容 动态语言 常见服务器脚本 动态语言可以做什么? 常见服务器环境快捷搭建软件 快速的搭网站的环境 CMS 1,动态语言:是对服务器行为的编程,这被称为服务器端脚本或服务器脚本. 2,常见服务器 ...

  5. git 使用和一些错误

    一.简单使用 Git是目前世界上最先进的分布式版本控制系统,用于自动记录每次文件的改动,但是和所有版本控制系统一样,只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等,而图片.视频这些二进 ...

  6. Effective python(五):内置模块

    1,考虑使用contextlib和with语句改写可复用的try/finally代码 with lock:print('lock is held')相当于try:print('lock is held ...

  7. ubuntu 16.04配置svn服务器

    为了操作方便,使用root登录服务器. 一.安装svn服务器 -->apt-get install subversion 二.创建svn版本库,存放需要管理内容路径 -->mkdir sv ...

  8. Nginx 轻松学 图文并茂 一学就会 附案例源码

    导读 篇幅较长,干货满满,需花费较长时间,转载请注明出处!背景音乐若影响到您,网页选项卡右上角即可关闭~~! Nginx概述 简介 Nginx (engine x) 是一个高性能的HTTP和反向代理w ...

  9. 记录一些服务端术语和搭建web服务器

    菜单快捷导航 服务端常用术语 搭建web服务器和配置虚拟主机 记录一些服务端方面的常用术语 1.CS架构和BS架构 1.1 CS架构 CS(Client/Server),基于安装包类型的桌面或手机软件 ...

  10. 新手必备 | 史上最全的PyTorch学习资源汇总

    目录: PyTorch学习教程.手册 PyTorch视频教程 PyTorch项目资源      - NLP&PyTorch实战      - CV&PyTorch实战 PyTorch论 ...