java多态技术解决了_Java中的对于多态的理解

Person person;//父类的引用指向子类的方法;

person = newStudent();//person类型引用做一个判断//(1)if(person.eat().size==2 )

{if(person instanceofPerson)

{

person.eat();

}else if(person instanceofStudent) {

Student stu=(Student)person;

stu.eat();

}

person.eat();//从代码角度看,此时是父类的引用调用的是父类中的eat方法//(2)子类若覆盖了父类的方法,eat动态绑定到父类的引用Person上,换个名字叫动态绑定//父类的引用可以调用子类的方法,我们把这一现象成为多态//从字面意思来理解person这个父类的引用一会是person一会是student//person有多种状态;//也叫方法的动态绑定//继承是通向多态的入口

person.f2();

person.gotobed();

person.eat();

Student stu= newStudent();

stu.eat();

stu.gotobed();//父类的引用能够调用子类的方法

}

Java中,父类的引用既可以指向父类的对象,也可以指向子类的对象。但子类的引用不能指向父类的对象。

引用类型也可以进行类型转换。

但转换的类型一定具有继承关系,即仅允许父子类之间进行转换。

如果尝试将毫无关联的两个类型进行转换,将会引发编译错误。可以使用instanceof来判断引用是否为指定的类型。

经典实例:

public classA {publicString show(D obj) {return ("A and D");

}publicString show(A obj) {return ("A and A");

}

}public class B extendsA{publicString show(B obj){return ("B and B");

}publicString show(A obj){return ("B and A");

}

}public class C extendsB{

}public class D extendsB{

}public classTest {public static voidmain(String[] args) {

A a1= newA();

A a2= newB();

B b= newB();

C c= newC();

D d= newD();

System.out.println("1--" +a1.show(b));

System.out.println("2--" +a1.show(c));

System.out.println("3--" +a1.show(d));

System.out.println("4--" + a2.show(b)); //4--B and A .首先a2是A引用,B实例,调用show(B b)方法,此方法在父类A中没有定义,所以B中方法show(B b)不会调用(多态必须父类中已定义该方法),再按优先级为:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O),即先查this对象的父类,没有重头再查参数的父类。查找super.show((super)O)时,B中没有,再向上,找到A中show(A a),因此执行。

System.out.println("5--" + a2.show(c)); //同上

System.out.println("6--" + a2.show(d)); //A and D .查找B中没有show(D d)方法,再查A中,有,执行。

System.out.println("7--" +b.show(b));

System.out.println("8--" + b.show(c)); //B and B .

System.out.println("9--" +b.show(d));

}

}

二、多态的好处:

1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。

2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。

3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。

4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。

5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值