多态小结

来源:互联网 发布:知沟理论名词解释 编辑:程序博客网 时间:2024/05/16 11:26

我们知道,java是面向对象的语言,其三个特征是封装,继承和多态,而实际上,前两个是为第三个多态所服务的,下面我们我来简单介绍下多态的概念及用法

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方法将子类对象对父类进行初始化,即完成了多态.




0 0