Java 多态基础
多态的定义
程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在运行期间才确定。
或者是同一个行为具有多个不同表现形式或形态的能力。
多态的体现
在玩LOL时,W键是技能;而且不同英雄的W的效果是不一样的。
在吃鸡中,W是前进。
在Word中,W就在字母按键。
实现多条的条件
① :必须是存在继承关系父类/子类
② :子类对父类的方法进行重写
③ :父类对象指向子类引用/向上转型
多态的简单示例
/**
* @author qiuling
*/
public class AnimalTest { class Animal {
public void eat (){
System.out.println("动物进食.");
}
} /**
* 多态条件1 发生继承关系
*/
class Bird extends Animal {
/**
* 多态条件2 进行父类方法的重写
*/
@Override
public void eat() {
System.out.println("小鸟吃虫子");
} /**
* 发生向上转型后 只能调用父类存在的属性或方法
* Animal bird = new Bird(); bird.fly()无法进行调用
*/
public void fly (){
System.out.println("一只小鸟飞飞飞");
}
} class Dog extends Animal {
@Override
public void eat() {
System.out.println("小狗吃肉");
}
} public static void main (String[] args){
//多态条件3 父类对象指向子类的引用/向上转型
Animal bird = new AnimalTest().new Bird();
Animal dog = new AnimalTest().new Dog();
bird.eat();
dog.eat();
//要调用子类特有的方法 只能向下转型
((Bird) bird).fly();
}
写博客发现一个蛮有意思的例子
/**
* @author qiuling
*/
public class Test {
class A {
public void show(D obj) {
System.out.println("A and D");
}
public void show(A obj) {
System.out.println("A and A");
}
}
class B extends A{
/**
* 此方法其实是对 本类覆写父类方法的重载
* A a2 = new Test().new B();向上转型后不会调用此方法
* @param obj
*/
public void show(B obj) {
System.out.println("B and B");
}
@Override
public void show(A obj) {
System.out.println("B and A");
}
}
class C extends B{
}
class D extends B{
} public static void main(String[] args){
A a1 = new Test().new A();
A a2 = new Test().new B();
B b =new Test().new B();
C c = new Test().new C();
D d = new Test().new D();
//A and A
a1.show(b);
//A and A
a1.show(c);
//A and D 前三个应该没问题
a1.show(d);
//B and A 向上转型后不会调用show(B obj)
//a2的声明类型为A,方法从A类开始搜索,A类没有show(B obj)的方法
//兼容找到show(A obj),因为a2的实际类型为B类,B类覆写了show(A obj),故是 B and A
a2.show(b);
//B and A
a2.show(c);
//A and D
a2.show(d);
//B and B 继承关系调用方法顺序,从本类到父类
b.show(b);
//B and B
b.show(c);
//A and D
b.show(d);
}
}
参考博文:https://my.oschina.net/langxSpirit/blog/1541074
https://www.cnblogs.com/chenssy/p/3372798.html
Java 多态基础的更多相关文章
- java多态——基础
多态 定义: 一个接口,多种实现,就是多种状态 价值: 特点:多态存在的特点,就是必须要有继承.覆盖.父类变量调用子类对象 场景: 首先检查父类中是否有该方法,如果没有,则编译错误:如果有,则 ...
- 【JAVA零基础入门系列】Day13 Java类的继承与多态
继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...
- [ Java学习基础 ] Java的继承与多态
看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...
- Java 多态——与C++的比较
学习了Java和C++之后,由于长期不使用C++,而java的基础知识掌握不牢,现在已经搞不清java多态了.现在先来谈谈java多态,稍后有时间再更新C++的多态,并进行比较~ 一. Java的多态 ...
- C++和java多态的区别
C++和java多态的区别 分类: Java2015-06-04 21:38 2人阅读 评论(0) 收藏 举报 转载自:http://www.cnblogs.com/plmnko/archive ...
- Android开发之Java必备基础
Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...
- JAVA面试基础
JAVA相关基础知识1.面向对象的特征有哪些方面 ?1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂 ...
- 【重走Android之路】【Java面向对象基础(三)】面向对象思想
[重走Android之路][基础篇(三)][Java面向对象基础]面向对象思想 1 面向对象的WWH 1.1 What--什么是面向对象 首先,要理解“对象”.在Thinkin ...
- java多态的理解----部分非原创
所谓多态,其实就是对于同一件事情,不同的对象要采取不同的行为,或者同一个对象在不同的情况下需要采取不同的行为方式. 不同的对象要采取不同的行为: 这有两种实现方式:接口实现和子类重新父类方法.这两种实 ...
随机推荐
- showmount - 显示关于 NFS 服务器文件系统挂载的信息
总览 /usr/sbin/showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] ...
- centos 搭建本地YUM源并使用apache共享YUM源
搭建本地YUM源 1.挂载镜像 2.搭建本地YUM源 删除多余repo文件保留一个就行 本地YUM源就搭建好了 yum repolist 查看yum源 3.使用apache共享YUM源 YUM服务器配 ...
- go语言从例子开始之Example9.切片
Slice 是 Go 中一个关键的数据类型,是一个比数组更加强大的序列接口 package main import "fmt" func main() { 不像数组,slice 的 ...
- 4python 解析库的使用
4.1 xml库 https://cuiqingcai.com/5545.html XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言.它最初是 ...
- 力扣—gray code (格雷编码) python实现
题目描述: 中文: 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异. 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列.格雷编码序列必须以 0 开头. 英文: Th ...
- 使用aop和BindingResult进行参数验证
1.在需要校验的参数名上面添加注解 2.在web层接收参数(参数前面使用@Valid进行标记,后面必须紧跟参数bindingResult,存储参数的错误信息) 3.使用aop进行校验信息统一处理 @C ...
- 使用ubuntu的一些操作笔记20191203
前言 环境: virtualbox + Ubuntu 16.04 情况: 可以进入虚拟机中Ubuntu系统的桌面,但是外部可以访问到 ssh,输入正确的用户名和密码无法登录 无法正常启动 Apache ...
- python用户名密码限定次数登录
""" 1. 用户输入帐号密码进行登陆 2. 用户信息保存在文件内 3. 用户密码输入错误三次后锁定用户"""" test.txt ...
- js的 算法 和 数据结构
js的 算法 1.对一个对象数组按照对象某个属性进行排序 : https://www.cnblogs.com/webcabana/p/7460038.html 在做公交的项目中就碰到过这种算法问题, ...
- flask中app.py: error: invalid choice: 'insert'........的问题
在flask中,分为两种操作方式,url指向函数或者终端指向函数,最终目的就是让函数执行,触发方式不同.终端执行更加安全, 另外如果在终端执行的时候出现 : 就是说明 insert 没有在@ mana ...