自学内容网 自学内容网

Java入门14——动态绑定(含多态)

大家好,我们今天来学动态绑定和多态,话不多说,开始正题~


但是要学动态绑定之前,我们要学习一下向上转型,方便后续更好地理解~

一、向上转型

1.什么是向上转型

网上概念有很多,但其实通俗来讲,向上转型就是把一个子类转换成父类

2.代码演示+讲解

这次我们依然以动物为例做演示~首先我们写一个父类Animal0,代码如下:

public class Animal0 {
    public String name;
    public int age;
    public Animal0(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

这个父类里面,有名字和年龄,我们再来写一个子类 fish :

public class fish extends Animal0{
    public fish(String name, int age) {
        super(name, age);
    }
}

子类也有了,那我们接下来就再创建一个测试类test吧~

在test类里面有非常关键的一步,就是向上转型!先给大家看一下代码:

public class test {
    public static void main(String[] args) {
        Animal0 animal0 = new fish("sfish",2);
        System.out.println(animal0.name);
        System.out.println(animal0.age);
    }
}

 这个被红色框框框起来的就可以称作向上转型,我们发现Animal0的类可以new它的子类fish,之后我们再次调用就可以直接 父类.成员变量名,就可以引用了

我们来看一下运行结果:

有了向上转型的基础,接下来,我们就可以学动态绑定了~

二、动态绑定

如果我们现在有父类Animal0,子类fish和子类monkey,我们知道,不管是哪种动物,它们都会吃,所以我们在父类写一个吃的方法~

代码如下:

public class Animal0 {
    public String name;
    public int age;
    public Animal0(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void eat() {
        System.out.println("eat");
    }
}

但是我们知道,鱼吃鱼食,猴子吃猴子的食物,吃的不一样,所以我们要在子类里面重写父类的方法~

那么fish类的代码和monkey类的代码如下:

public class fish extends Animal0{
    public fish(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("fish eat");
    }
}
public class monkey extends Animal0{
    public monkey(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("monkey eat");
    }
}

那么我们如何调用这个具体的方法呢?这个时候我们来写一下test类~

public class test {
    public static void main(String[] args) {
        Animal0 animal0 = new fish("sfish",2);
        System.out.println(animal0.name);
        System.out.println(animal0.age);
        animal0.eat();

        Animal0 animal1 = new monkey("smonkey",3);
        System.out.println(animal1.name);
        System.out.println(animal1.age);
        animal1.eat();
    }
}

这个时候,父类引用了子类的对象,我们就可以实现 eat 的具体方法啦~

运行结果如下:

 这就是我们的动态绑定~

三、多态

如果一个功能可以调用多种状态就很方便,所以我们来看看多态

这里除了test类不同之外,其它是一样的,我们来看看test类的代码~

public class test {
    public static void eatfunc(Animal0 animal0){
        animal0.eat();
    }

    public static void main(String[] args) {
        fish sfish = new fish("sfish",2);
        monkey smonkey = new monkey("smonkey",3);
        eatfunc(sfish);
        eatfunc(smonkey);
    }
}

这里我们定义了一个eatfunc的方法,传一个Animal0类的参数,然后在调用的时候我们调用了fish类和monkey类的对象,这就是我们的多态


这就是我们今天的内容,大家加油鸭! 


原文地址:https://blog.csdn.net/2302_81032013/article/details/143576569

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!