美文网首页互联网科技
java基础之---多态

java基础之---多态

作者: xml_ | 来源:发表于2019-05-05 16:30 被阅读5次

    正文

    多态的存在有三个必要的条件:

    • 要有继承(两个类之间存在继承关系,子类继承父类)
    • 要有重写(在子类里面重写从父类继承下来的方法)
    • 父类引用指向子类对象
      这三个条件一旦满足,当你调用父类里面被重写的方法的时候,实际当中new的是哪个子类对象,就调用这个子类对象的方法。下面以代码进行说明

    这里创建了一个Animal类,作为父类:

    package com.mlin;
    
    public class Animal {
        
        //私有成员变量
        private String name;
        
        //构造方法
        Animal(String name){
            this.name = name;
        }
        
        //这里定义了一个方法
        public void call(){
            System.out.println("动物......");
        }
    
    }
    
    

    创建两个子类,分别为Cat类和Dog类,它们都继承Animal类:

    package com.mlin;
    
    public class Cat extends Animal {
        
        //定义自己的私有成员变量
        private String catColor;
        
    
        //构造方法
        Cat(String name ,String catColor) {
            super(name);//在构造方法的实现里面首先使用super调用父类Animal的构造方法Animal(String name),把子类对象里面的父类对象先造出来
            this.catColor = catColor;
        }
        
        //这里是重写了call方法
        public void call(){
            System.out.println("我是cat哦....");
        }
    
    }
    
    package com.mlin;
    
    public class Dog extends Animal {
        
        //定义自己的私有成员变量
        private String dogColor;
        
    
        //构造方法
        Dog(String name ,String dogColor) {
            super(name);//在构造方法的实现里面首先使用super调用父类Animal的构造方法Animal(String name),把子类对象里面的父类对象先造出来
            this.dogColor = dogColor;
        }
        
        //这里是重写了call方法
        public void call(){
            System.out.println("我是dog哦....");
        }
    
    }
    
    

    创建一个person类,用于饲养宠物:

    package com.mlin;
    
    public class Person {
        
        //定义两个私有成员变量
        private String name;
        private Animal pet;
        
        /**
         * 在person类里面定义构造方法,第二个参数是Animal类型给程序带来了灵活性
         * 因为这个Animal类型的参数是父类对象的引用类型,因此当我们传参数的时候,
         * 可以把这个父类的子类对象传过去,即传Dog、Cat都可以。
         * @param name
         * @param pet
         */
        Person(String name,Animal pet){
            this.name = name;
            this.pet = pet;
        }
        
        public void myCall(){
    
            pet.call(); //传了什么对象进来,就让这个对象去调用它自己的call方法
        }
        
        public static void main(String arg[]){
            
            //这里分别new了一个cat对象和dog对象,这两个都包含一个父类Animal对象
            Cat cat = new Cat("catname", "black");
            Dog dog = new Dog("dogname","yellow");
            
            //这里new了两个person对象,分别为p1,养了一个cat,另一个是p2,养了一只dog
            Person p1 = new Person("andy", cat);
            Person p2 = new Person("andy", dog);
            
            //两个person对象调用了myCall方法,使他们自己的宠物调用自己的call方法
            p1.myCall();
            p2.myCall();
        }
    
    }
    
    

    运行结果如下:

    结果
    以上就实现了动态绑定,也就是多态。

    原创作者:凌小样
    作品链接:https://www.jianshu.com/p/c8160a2bd019
    【原创不易,转载请注明出处,感谢理解】
    一位爱生活,爱创作,爱分享,爱自己的90后女程序员一枚,记录工作中的点点滴滴,一起学习,共同进步,期待能和优秀的您交上朋友

    相关文章

      网友评论

        本文标题:java基础之---多态

        本文链接:https://www.haomeiwen.com/subject/hlshoqtx.html