大家好,我们今天来学动态绑定和多态,话不多说,开始正题~
但是要学动态绑定之前,我们要学习一下向上转型,方便后续更好地理解~
一、向上转型
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类的对象,这就是我们的多态
这就是我们今天的内容,大家加油鸭!