首页 > 代码库 > java面向对象编程(七)--四大特征之多态

java面向对象编程(七)--四大特征之多态

1、多态概念

多态性是对象多种表现形式的体现。比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫、小狗、蜥蜴等等。那么我到宠物店说"请给我一只宠物",服务员给我小猫、小狗或者蜥蜴都可以,我们就说"宠物"这个对象就具备多态性。

java中的多态,就是指一个引用(类型)在不同情况下的多种状态。也可以理解成,多态是指通过指向父类的指针,来调用在不同子类中实现的方法。也可以理解为“一个接口,多个方法”。

实现多态有两种方式:1、继承;2、接口

案例一:

多态演示[Dome122.java]//演示继承、方法覆盖、多态public class Demo122 {    public static void main(String[] args) {        //非多态,创建对象,然后调用其方法        Cat cat=new Cat();        cat.cry();        Dog dog=new Dog();        dog.cry();        //多态机制,可通过父类创建的对象调用子类的方法,即所谓的一个接口,多个方法        Animal an=new Cat();        an.cry();//显示猫猫叫        an=new Dog();        an.cry();//显示汪汪叫    }}//动物类class Animal{    String name;    int age;   //让外部的方法访问类内部(私有)的属性,需要将类内部的属性添加get和set方法
    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    //动物会叫    public void cry(){        System.out.println("不知道怎么叫");    }}//创建Dog子类并继承Animal父类及覆盖cry方法class Dog extends Animal{    //狗叫    public void cry(){        System.out.println("汪汪叫");    }}class Cat extends Animal{    //猫叫    public void cry(){        System.out.println("猫猫叫");    }}

案例二:

/*
   多重多态演示[Dome123.java]*/
//演示子类继承父类、方法覆盖、多态方法public class Demo123 {    public static void main(String[] args) {        //非多态演示        System.out.println("非多态演示:");        Cat cat=new Cat();        cat.cry();        Dog dog=new Dog();        dog.cry();        System.out.println();                //多态演示        System.out.println("多态演示:");        Animal an=new Cat();        an.cry();        an=new Dog();        an.cry();        System.out.println();            //多重多态演示        System.out.println("多重多态演示:");        Master master=new Master();        master.feed(new Dog(),new Bone());        master.feed(new Cat(),new Fish());    }}//主人类class Master{    //给动物喂食物,使用多态,只要写一个方法    public void feed(Animal an,Food f){        an.eat();        f.showName();    }}//食物父类class Food{    String name;    public void showName(){        System.out.println("食物");    }}//食物鱼子类class Fish extends Food{    public void showName(){        System.out.println("鱼");    }}//食物骨头子类class Bone extends Food{    public void showName(){        System.out.println("骨头");    }}//动物类Animal父类class Animal{    String name;    int age;        public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    //动物会叫    public void cry(){        System.out.println("不知道怎么叫");    }    //动物吃东西    public void eat(){        System.out.println("不知道吃什么");    }}//创建Dog子类并extends继承Animal父类及覆盖cry方法class Dog extends Animal{    //狗叫    public void cry(){        System.out.println("汪汪叫");    }    //狗吃东西    public void eat(){        System.out.println("狗爱吃骨头");    }}class Cat extends Animal{    //猫自己叫    public void cry(){        System.out.println("猫猫叫");    }    //猫吃东西    public void eat(){        System.out.println("猫爱吃鱼");    }}

多态--注意事项:

1、java允许父类的引用变量引用它的子类的实例(对象)

Animal an=new Cat();//这种转换时自动完成的