zl程序教程

您现在的位置是:首页 >  后端

当前栏目

java面向对象之多态

JAVA 面向对象 多态
2023-09-11 14:18:18 时间

多态:指同一个实体同时具有多种形式

好比,你去面馆吃面,说我要吃面,那么;老板给我牛肉面,鸡蛋面等都可以,

这就是说"面"有多种形态,也就是说实体有多种形态;

编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给变量的对象决定。

如果编译时类型和运行时类型不同,就出现多态。

 

Eg:

前提:Student  extends   Person:

 

Person p = new Person();

Student s = new Student();

Person p = new Student();//多态

 

引用关系:父类变量指向子类实例对象

 

实现多态的机制:

父类的引用变量可以指向子类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

 

多态的作用:

把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

只修改方法的实现,不必修改方法的声明

继承是多态产生的前提条件;

 

分类:

编译时多态:方法重载

运行时多态:方法覆写

 

Eg:

package test;

 

class Dog{

    void eat(){

        System.out.println("一般的狗吃一般的狗粮!");

    }

}

 

class HashDog extends Dog{

    void eat(){

        System.out.println("哈士奇吃哈士奇的狗粮!");

    }

}

 

class ZangAoDog extends Dog{

    void eat(){

        System.out.println("藏獒吃藏獒的狗粮!");

    }

}

 

//定义一个动物园喂的方法

class Zoo{

   

    void feed(Dog d){

        d.eat();

    }

   

}

 

public class Demo11 {

    public static void main(String[] args) {

       

        Dog hd = new HashDog();

       

        Dog zd = new ZangAoDog();

       

        Zoo z = new Zoo();

        z.feed(hd);

        z.feed(zd);

    }

}

 

输出:

哈士奇吃哈士奇的狗粮!

藏獒吃藏獒的狗粮!