多态的定义
我们采用渐进的方法来一步一步了解多态。
一 课本上的定义。
多态是在程序运行期间判断所引用对象的实际类型,根据实际的类型调用其相应的方法。
多态也称动态绑定。
本人在学习多态时刚开始有些迷茫不知道从何下手,虽然知道了多态的定义但还是不知道如何去用,后来看到了马士兵老师的教程中提到了多态的重要三条规则后,对多态有了初的认识 这三条规则分别是
1.要有继承,子类继承父类。
2.要有重写,子类要重写父类的方法。
3.父类引用指向子类对象。
通过以上三条基本可以确定一个多态。
二 JAVA学习人员对多态的理解:
当我们对初态有了初的了解后相信还是有很多人对此不太懂,那么我们继续进一步说明,以下是一些优快云网友的回答:
(1)多态可以让我们不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法,这就是多态的好处。
向上转型属于多态的一种,下面就是向上转型。
假设你现在的程序是这样的:
List list = f1(); //这个f1()是你的同事写的一个程序,返回参数类型是ArrayList
list.get(2);
list.iterator();
....
list这个引用用了很多地方了.
然后有一天,你的同事跟你说,不行啊,我这个f1()的方法返回参数类型一定要改为LinkList!!!
那么,你将不用改任何的代码,然后轻松自在地喝着红茶跟你的同事说,没关系,你改吧.
但如果你开始的时候是这样写:
ArrayList list = f1();
(2)JAVA最重要的一条就是“一切对接口编程,不要对具体对象编程”。
对接口编程的基本就是多态,使用多态程序扩展性好,便于维护,代码重用率高。
(3) 多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来。多态不但能够该三代码的组织机构和可读性,还能够创建可扩展的程序-即无论在项目最初创建时还是在需要加新功能时都可以“生长”的程序。用多态最主要的目的还是为了以后的扩展更加灵活,可以参考Java编程思想第8章对多态的解释
三.现在你是否又对多态有了新的认识呢?柳暗花明又一村 接着我们趁热打铁 举两个例子继续探讨多态
- java 代码
- class Computer{
- public void turnOn(){
- }
- }
- 现在有了电脑这个类,那么个人PC,笔记本都是继承他。
- java 代码
- class PC extends Computer{
- public void turnOn(){
- System.out.println("PC has turn on");
- }
- }
- class NB extends Computer{
- public void turnOn(){
- System.out.println("NB has turn on");
- }
- }
- 我们看到,每个类都有一个 turnOn()方法,而在父类中这个方法是空的,子类中各自有不同的实现,到这里可能还不太明显。如果有另外一个方法,要接受这些类作为参数,就像这样
- java 代码
- class Test{
- public void go(Computer computer){
- computer.turnOn();
- }
- }
- 这个方法接收的是基类参数,当然我们是可以把子类传递给方法的,也应该这么做。
- java 代码
- go(new PC());
- go(new NB());
- 这样他就会去调用具体子类的turnOn()方法,所以这两次调用的输出是不一样的.如果不用基类作为参数,我们想调用每个子类的turnOn()方法,那么就要些两个方法体一样的go()而接收不同的参数的重载。
- java 代码
- public void go(PC computer){
- computer.turnOn();
- }
- public void go(NB computer){
- computer.turnOn();
- }
- 这样些也是正确的,但是这样会产生很多重复代码,而且也不易维护,当然这只是多态中最基本的一个部分,Java多态机制还有很多特性,关于这些建议大家看看 java编程思想(think in java)这本书,里面讲的很详细,这里只是很简单的描述了一下,还望个各位高手不要见笑。
- class Shape{
- void style(){
- }
- }
- class Circle extends Shape{
- void style(){
- System.out.println("Circle's Style");
- }
- }
- class Square extends Shape{
- void style(){
- System.out.println("Square's Style");
- }
- }
- class Person{
- private String name;
- Person(String name,Shape i){
- i.style();
- }
- }
- public class TestShape {
- public static void main(String[] args) {
- Circle c = new Circle();
- Square s = new Square();
- Person p1 = new Person("name1",c);//c传给了shape i
- Person p2 = new Person("name2",s); s传给了shape i
- }
- }
以上就是对多态的概述,不过这只是对多态的基础认识,要想更好的了解多态应该找些大型的程序去看,多态其实还包括很多更深层的东西,现在我们只需要对多态初步了解,以后我们会进一步讨论多态,因为多态是面向对象语言的特色。