互联网科技

java基础之---多态

2019-05-05  本文已影响5人  xml_

正文

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

这里创建了一个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后女程序员一枚,记录工作中的点点滴滴,一起学习,共同进步,期待能和优秀的您交上朋友

上一篇下一篇

猜你喜欢

热点阅读