zoukankan      html  css  js  c++  java
  • 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、关于类型转换还有一些具体的细节要求,我们在后面还要提,比如子类能不能转换成父类,有什么要求等等...

     



     
     

     

     






     





  • 相关阅读:
    ELK扫盲及搭建
    重构支付接口(二)重构方案
    重构支付接口(一)支付接口存在的问题
    redis的持久化(RDB与AOF)
    死锁、活锁、性能问题
    Android控件_RecycleView+CarView+Palette联合应用
    窗体间传值 ,子窗体传给父窗体
    【Android-自定义控件】 漂亮的Toast
    【Android-关闭所有Activity】关闭activity之前的所有activity,重启actibity
    【Android-自定义控件】SwipeRefreshDemo 下拉刷新,上拉加载
  • 原文地址:https://www.cnblogs.com/xuxaut-558/p/10044180.html
Copyright © 2011-2022 走看看