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

1167156-20181130145624767-2121107030.png
 
 eclipse和myeclipse的区别:
 eclipse的插件:手机开发
1167156-20181130145625287-310690679.png

1167156-20181130145625931-4123524.png
 访问内部属性的公开的方法;

1167156-20181130145626767-1541461021.png
  1167156-20181130145627081-1687992215.png
 选中属性,自动生成;

  1167156-20181130145627794-1019033859.png
  1167156-20181130145628102-1699049359.png
 这样,没有出现多态;

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

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

1167156-20181130145629511-858103395.png
让一种引用来管理好些个对象;

  1167156-20181130145629840-744017041.png
 父类需要写cry( ),否则,无法调用;

1167156-20181130145630284-1426774596.png
  1167156-20181130145630558-1753016521.png
 在Fish中把这份方法showName()给覆盖了;

1167156-20181130145630843-1103970902.png
 如果没有多态,你有几种多态就得写几个feed函数;

 有了多态,方法就可以用一个;
1167156-20181130145631086-756883612.png
 
  1167156-20181130145631332-1704373260.png
  好处:将来多出来动物或者食物;下面的代码不需要改变;
  让代码更加地灵活;
1167156-20181130145631561-1918326339.png
 
1167156-20181130145631780-1488000703.png
 好处:将来动物,食物在增加的时候有些东西是不需要变化的;
 
   1167156-20181130145632096-1114024651.png
  1167156-20181130145632386-1010606487.png
 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("猫猫叫");

    }

}

1167156-20181130145632691-1455907432.png

 

-------------------------------------------------------------------------------

多重多态演示[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、关于类型转换还有一些具体的细节要求,我们在后面还要提,比如子类能不能转换成父类,有什么要求等等...

 



  1167156-20181130145633042-342279102.png
 

1167156-20181130145633196-1781424694.png
 

1167156-20181130145633415-1104784820.png
 






 





转载于:https://www.cnblogs.com/xuxaut-558/p/10044180.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值