Java第十天,多态
多态
一、多态的定义:
一个对象拥有多种形态,这就是对象的多态性。也就是说多态针对的是对象。多态的前提是接口和继承(C++中实行多继承,不存在接口)。
二、多态在代码中的形式:
父类 对象名 = new 子类();
或者
接口 对象名 = new 实现类();
三、成员方法使用规则:
右边new的是谁,便使用谁的成员方法(编译看左,运行看右)。
四、成员变量使用规则:
①直接通过对象名访问成员变量:
看等号左边是谁,则优先用谁。没有则向上找。
②间接通过成员方法访问成员变量:
看该方法属于谁,则优先用谁,没有则向上找。
五、对象的转型:
①向上转型
(1)其实就是多态的写法,左父右子。向上转型一定是安全的。
(2)对象无法调用子类特有方法。
②向下转型
(1)其实就是还原过程(只能还原为原来类别)。格式为:
子类 对象名 = (子类)父类对象
(2)转型很可能会失败(本来是猫,向上转为动物后,又向下转型为狗)。
(3)如何判断对象本来属于哪个类(子类)。
对象 instanceof 类 ==》 返回一个布尔值。
六、多态的注意事项:
- 只有成员方法才能覆盖重写,成员变量不可以覆盖重写。
- 父类如果要调用子类的方法必须要有同名方法。
- 多态情况下,子父类存在着同名的成员变量时,默认会访问父类的成员变量。
- 多态情况下,子父类存在着同名的非静态函数时,默认是访问子类的成员函数。
- 多态情况下,子父类存在着同名的静态函数时,默认是访问父类的成员函数。
- 多态情况下,不能访问子类特有的成员。
七、代码
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第十天,多态的更多相关文章
- Java基础十二--多态是成员的特点
Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...
- java提高篇之理解java的三大特性——多态
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- Java基础学习小记--多态
题外话:总结了多年的学习心得,不得不说,睡眠是一个学习者的必需品!所谓"早起毁一天"不是没有道理哪,特别对Coders来说,有几天不是加班到夜里.好吧,我承认对于初学Java的我, ...
- JAVA三大特性之多态
面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据 ...
- Java三大特征之多态(三)
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- 【转】java提高篇之理解java的三大特性——多态
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- JAVA 面向对象中的多态
多态是继封装.继承之后,面向对象的第三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一个 ...
- Java面试题,Java三大特性之一——多态的理解
首先我们知道Java是一门面向对象的语言 面向对象三大特性,封装.继承.多态. 封装.继承.多态 ↓ 无论是学习路线,还是众人的口语习惯,都是按照这个这样进行排序,这是有原因的.因为封装好了才能继承, ...
- JAVA第十周《网络编程》学习内容总结
JAVA第十周<网络编程>学习内容总结 学习内容总结 1.初听到网络编程四个字可能会觉得很困难,实际上网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据,把数据发送到指定的位置, ...
- Java基础十--接口
Java基础十--接口 一.接口的定义和实例 /* abstract class AbsDemo { abstract void show1(); abstract void show2(); } 8 ...
随机推荐
- 【Weiss】【第04章】AVL树例程
普通的二叉搜索树可能会由于数据不平均.删除产生高度差等原因,使树倾向于不平衡生长,导致操作慢于O(NlogN). 为应对此现象,将搜索.删除.插入的最坏时间也控制在O(NlogN)上,产生了平衡二叉树 ...
- BigDecimal介绍及BigDecimal实现四舍五入
BigDecimal介绍及BigDecimal实现四舍五入 BigDecimal是什么? 我们知道float最大精度是7-8位有效数字,而double的最大精度是16-17位有效数字,那么大于16位的 ...
- 搭建DVWA漏洞环境
DVWA是一款开源的渗透测试漏洞练习平台,其中内含XSS.SQL注入.文件上传.文件包含.CSRF和暴力破解等各个难度的测试环境. 搭建步骤: 1.在Windows系统中安装WAMP 下载地址:htt ...
- vue后台管理系统权限处理
vue后台管理系统权限 1.权限问题:用户和管理员进入管理系统看到的模块是不一样的,管理员看的的要比用户看到的多.需要用到动态加载路由,router.addRouters()来动态的挂载路由 // 1 ...
- 洛谷1363 幻象迷宫dfs
题目网址:https://www.luogu.com.cn/problem/P1363 迷宫是无限多块地图拼接而成的,问是否可以在迷宫中走无限远.解决方案是dfs,走出初始地图之后的位置映射到原位置( ...
- ThinkPHP的几种路由形式总结
本篇文章总结了ThinkPHP的几种路由形式,分别是普通模式.PATHINFO.REWRITE和兼容模式,希望对各位学习thinkphp的朋友有帮助! thinkphp官方文档里有详细的说明: Thi ...
- Java attack - Java 特性
Java 语言平台版本 l J2SE (Java 2 Platform Standard Edition) 标准版 是为开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础,可以完成 ...
- 解决在linux下的eclipse syso Alt+/无法使用
1.绑定快捷键 2.配置proposal
- 常见排序算法总结分析之选择排序与归并排序-C#实现
本篇文章对选择排序中的简单选择排序与堆排序,以及常用的归并排序做一个总结分析. 常见排序算法总结分析之交换排序与插入排序-C#实现是排序算法总结系列的首篇文章,包含了一些概念的介绍以及交换排序(冒泡与 ...
- OpenCV-Python 交互式前景提取使用GrabCut算法 | 三十五
目标 在本章中, 我们将看到GrabCut算法来提取图像中的前景 我们将为此创建一个交互式应用程序. 理论 GrabCut算法由英国微软研究院的Carsten Rother,Vladimir Kolm ...