JAVA入门到精通-第12讲-多态:一个引用(类型)在不同情况下的多种状态

 
 eclipse和myeclipse的区别:
 eclipse的插件:手机开发

 访问内部属性的公开的方法;

 
 选中属性,自动生成;

 
 
 这样,没有出现多态;

 让JAVA编译器自动去判断时Cat还是Dog?
 
 把动物Animal的引用指向Cat;

多态:
an引用一会儿是猫,一会儿是狗;
会根据等号右边自动判断是猫还是狗的 ;
通过多态,更为方便;

让一种引用来管理好些个对象;

 
 父类需要写cry( ),否则,无法调用;

 
 在Fish中把这份方法showName()给覆盖了;

 如果没有多态,你有几种多态就得写几个feed函数;

 有了多态,方法就可以用一个;
 
 
  好处:将来多出来动物或者食物;下面的代码不需要改变;
  让代码更加地灵活;
 
 好处:将来动物,食物在增加的时候有些东西是不需要变化的;
 
  
 
 an 就是父类的引用变量;
 把子类交给父类;

java面向对象编程(2)--四大特征

多态--概念

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

实现多态有两种方式: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;

    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("猫爱吃鱼");

    }

}

 

多态--注意事项:

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

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

2、关于类型转换还有一些具体的细节要求,我们在后面还要提,比如子类能不能转换成父类,有什么要求等等...

 



 
 

 

 






 





原文地址:https://www.cnblogs.com/xuxaut-558/p/10044180.html