多态小结
2015-08-03 19:22
225 查看
我们知道,java是面向对象的语言,其三个特征是封装,继承和多态,而实际上,前两个是为第三个多态所服务的,下面我们我来简单介绍下多态的概念及用法
1.多态的概念
多态一般是父类引用指向子类对象,或者是接口引用指向实现类的对象.
格式为: 父类 对象名=new 子类(),便于理解我们写为: Human zhangsan = new Student();
上面这个式子可以理解为:我需要一个类为人的对象叫zhangsan,你给我产生了一个学生类的zhangsan,所以这时的zhangsan是属于那个类呢?属于子类,但是只能调用父类中有的成员,因为我需要的只是人这个类,你给我的学生类我只需要他人这个类的功能,但是如果我们通过强制类型转换将zhangsan进行向下转型,就可以调用子类的方法和变量了,很明显,通过一个转型,就让张三完全具备并可以调用学生类的属性.此时有人会问,因为你知道zhangsan是属于Student类,但是如果你不是很确定他属于哪个类如果进行强转不就出错了吗?所以java提供了一个返回类型是boolean的关键字instanceof来判断是否是其子类.
相对于向下转型,还有向上转型一说,没错,子类为什么可以直接调用父类中的成员就是因为向上转型是自动完成的,不需要强制,这才是子父类继承,实现的实质.
2.多态的应用
2.1参数传递.
由于多态,子类对象可以传入某个方法的形参类型为父类,从而调用该方法,所以该父类的子类对象都可以调用.举例代码如下:
将父类作为一个成员变量,私有,然后通过setter方法将子类对象对父类进行初始化,即完成了多态.
1.多态的概念
多态一般是父类引用指向子类对象,或者是接口引用指向实现类的对象.
格式为: 父类 对象名=new 子类(),便于理解我们写为: Human zhangsan = new Student();
上面这个式子可以理解为:我需要一个类为人的对象叫zhangsan,你给我产生了一个学生类的zhangsan,所以这时的zhangsan是属于那个类呢?属于子类,但是只能调用父类中有的成员,因为我需要的只是人这个类,你给我的学生类我只需要他人这个类的功能,但是如果我们通过强制类型转换将zhangsan进行向下转型,就可以调用子类的方法和变量了,很明显,通过一个转型,就让张三完全具备并可以调用学生类的属性.此时有人会问,因为你知道zhangsan是属于Student类,但是如果你不是很确定他属于哪个类如果进行强转不就出错了吗?所以java提供了一个返回类型是boolean的关键字instanceof来判断是否是其子类.
相对于向下转型,还有向上转型一说,没错,子类为什么可以直接调用父类中的成员就是因为向上转型是自动完成的,不需要强制,这才是子父类继承,实现的实质.
2.多态的应用
2.1参数传递.
由于多态,子类对象可以传入某个方法的形参类型为父类,从而调用该方法,所以该父类的子类对象都可以调用.举例代码如下:
public class Boss { //请客一个程序员吃饭 public void entertain(Engineer e){ //调用程序员对象的吃饭方法 e.eat(); } public void entertain(Human h){ h.eat(); if(h instanceof Engineer){ ((Engineer)h).coding(); } } }
public class Human { public void eat(){ System.out.println("吃饭"); } }
public class Engineer extends Human{ public void coding(){ System.out.println("写程序"); } }
public class Tester { public static void main(String[] args) { Boss lisi = new Boss(); Engineer zhangsan = new Engineer(); //老板李四请程序员张三吃饭 lisi.entertain(zhangsan);//h = zhangsan } }2.2属性的设置
将父类作为一个成员变量,私有,然后通过setter方法将子类对象对父类进行初始化,即完成了多态.
相关文章推荐
- HDU 2689 Sort it (树状数组)
- POJ 2528 Mayor's posters 并查集+离散化做法
- linux编程出错: Value too large for defined data type.doc
- 凸n+2边形进行三角形分割(只连接顶点对形成n个三角形)数:
- 拓扑排序 SRM 660 Div2 Medium: PrivateD2party
- LA 4256 DP Salesmen
- Linux启动新进程的几种方法及比较
- 线段树成段更新及懒散标记
- can’t help doing还是can’t help to do
- 母港TOP用新API_url = "api_port/port";20150803
- 母港TOP用新API_url = "api_port/port";20150803
- Android ViewFlipper用法浅析
- 瞎扯大数据
- C++ 计蒜客算法基础入门最长上升子序列
- 指针函数与函数指针的区别
- c/c++----------虚函数、虚继承、纯虚函数
- linuxmint 下开启和关闭防火墙
- eclipse + redis + python
- setInterval循环设置并传入不同的参数
- objective-c遍历