多态的定义

  程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在运行期间才确定。

  或者是同一个行为具有多个不同表现形式或形态的能力。

多态的体现

  在玩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 多态基础的更多相关文章

  1. java多态——基础

    多态 定义: 一个接口,多种实现,就是多种状态     价值: 特点:多态存在的特点,就是必须要有继承.覆盖.父类变量调用子类对象 场景: 首先检查父类中是否有该方法,如果没有,则编译错误:如果有,则 ...

  2. 【JAVA零基础入门系列】Day13 Java类的继承与多态

    继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...

  3. [ Java学习基础 ] Java的继承与多态

    看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...

  4. Java 多态——与C++的比较

    学习了Java和C++之后,由于长期不使用C++,而java的基础知识掌握不牢,现在已经搞不清java多态了.现在先来谈谈java多态,稍后有时间再更新C++的多态,并进行比较~ 一. Java的多态 ...

  5. C++和java多态的区别

    C++和java多态的区别 分类: Java2015-06-04 21:38 2人阅读 评论(0) 收藏 举报  转载自:http://www.cnblogs.com/plmnko/archive ...

  6. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  7. JAVA面试基础

    JAVA相关基础知识1.面向对象的特征有哪些方面 ?1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂 ...

  8. 【重走Android之路】【Java面向对象基础(三)】面向对象思想

    [重走Android之路][基础篇(三)][Java面向对象基础]面向对象思想   1 面向对象的WWH   1.1 What--什么是面向对象         首先,要理解“对象”.在Thinkin ...

  9. java多态的理解----部分非原创

    所谓多态,其实就是对于同一件事情,不同的对象要采取不同的行为,或者同一个对象在不同的情况下需要采取不同的行为方式. 不同的对象要采取不同的行为: 这有两种实现方式:接口实现和子类重新父类方法.这两种实 ...

随机推荐

  1. spring整合mybatis后,mybatis一级缓存失效的原因

    一般来说,可以在5个方面进行缓存的设计: 最底层可以配置的是数据库自带的query cache, mybatis的一级缓存,默认情况下都处于开启状态,只能使用自带的PerpetualCache,无法配 ...

  2. 简单递归____Fibonacci数列

    #include <stdio.h> int fun(int x) { ||x==) ; else return fun(x-1)+fun(x-2); } int main() { int ...

  3. Win7 VS2012智能提示显示英文的处理办法

    其原因为.net的语言包没安装成功, 解决方法为 替换自己英文显示的,把C:\Windows\Microsoft.NET\Framework\v2.0.50727\zh-CN 目录的文件,替换到相应的 ...

  4. Vue学习笔记【32】——Vue路由(watch、computed和methods之间的对比)

    computed属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算.主要当作属性来使用: methods方法表示一个具体的操作,主要书写业务逻辑: watch一个对象,键是需要观察的表达式,值是 ...

  5. ofbiz:找不到org.ofbiz.widget.ContentWorkerInterface的类文件

    ofbiz编译报错: 找不到org.ofbiz.widget.DataResourceWorkerInterface的类文件 找不到org.ofbiz.widget.ContentWorkerInte ...

  6. 【Flutter学习】页面布局之基础布局组件

    一,概述 Flutter中拥有30多种预定义的布局widget,常用的有Container.Padding.Center.Flex.Row.Colum.ListView.GridView.按照< ...

  7. Python每日一题 009

    题目 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但是要分别列出来. 代码 参照网络上代码 # coding: utf-8 import os import re # ...

  8. Delphi正则表达式使用方法(TPerlRegEx)

    目前主流的delphi下的正则表达式,应该是 PerlRegEx . 官方网站: http://www.regular-expressions.info/delphi.html    直接下载: ht ...

  9. rocketmq单点部署

    下载地址:https://github.com/alibaba/RocketMQ 转载请注明来源:http://blog.csdn.net/loongshawn/article/details/510 ...

  10. [CSP-S模拟测试ex]题解

    爆零了.少特判见祖宗.还好这场不计入总分. 考场上什么都没想.感觉考试状态又回到了两个月前. A.Antipalindrome 手玩样例,不难发现题目中要求的合法串的充要条件是:对于任意$i \in ...