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多态的理解----部分非原创
所谓多态,其实就是对于同一件事情,不同的对象要采取不同的行为,或者同一个对象在不同的情况下需要采取不同的行为方式. 不同的对象要采取不同的行为: 这有两种实现方式:接口实现和子类重新父类方法.这两种实 ...
随机推荐
- shutdown - 关闭系统
总览 SYNOPSIS /sbin/shutdown [-t sec] [-arkhncfF] time [warning-message] 描述 DESCRIPTION shutdown 以一种安全 ...
- go语言从例子开始之Example10.map(字典)
map 是 Go 内置关联数据类型(在一些其他的语言中称为哈希 或者字典 ) package main import "fmt" func main() { 要创建一个空 map, ...
- go语言从例子开始之Example27.超时处理
超时 对于一个连接外部资源,或者其它一些需要花费执行时间的操作的程序而言是很重要的.得益于通道和 select,在 Go中实现超时操作是简洁而优雅的. Example: package main im ...
- ANSI-2
一.ANSI编码 1. 如前所述,在全世界所有国家和地区的文字符号统一编码的UCS/Unicode编码方案问世之前(UCS.Unicode后文有详细介绍),各个国家.地区为了用计算机记录并显示自己的字 ...
- WTSEnumerateSessions 枚举session信息
http://dwbpriarie.lofter.com/post/1cd339fc_8cf728c https://www.cnblogs.com/priarieNew/p/9755655.html ...
- [js测试]JavaScript Web Quiz By davidshariff
Question1 var foo = function foo() { console.log(foo === foo); }; foo(); 输出是"true",因为foo就指 ...
- java中数据库和VO的一一对应关系
如图所示,数据库中数据如果有下划线,则JavaVO中删除,除第一个单词外,其他单词首字母大写
- loadrunner 11安装教程
见百度经验,大神教程 https://jingyan.baidu.com/article/da1091fb199da7027849d6ff.html
- mongodb重置密码
1.删除服务,重新创建没有验证的服务 2.关闭服务后修改conf文件auth=false或者 3.重新开启服务后然后进入mongo 查看是否存在用户 use admin db.system.users ...
- Hashtable、HashMap、TreeMap、ConcurrentHashMap、ConcurrentSkipListMap区别
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11444013.html 并发场景下的Map容器使用场景 如果对数据有强一致要求,则需使用Hashtab ...