为什么使用多态?实现多态的有哪些方式

实现多态的两种方式
  一、什么是多态?

        父类类型的变量指向子类创建的对象,使用该变量调用父类中一个被子类重写的方法,则父类中的方法呈现出不同的行为特征,这就是多态。

        简单的来说编译时方法行为表现的是父类中的方法,运行时方法行为表现的是子类中重写该方法的行为特征

二、为什么使用多态?

       1、实现代码的复用,避免代码的冗余;

       2、减少代码之间的关联性,即耦合度,方便后期对代码的修改,功能的改善,不必牵一发而动全身,减少不必要的麻烦;

       3、能够通过重写子类的方法,使不同的对像具有不同的功能,扩展了功能。

       3、举例说明

//哺乳类
piublic class Mammal
public void move(){
System.out.println("会移动!");
}
}

//鲸鱼类
public class Whale extends Mammal{
public void move() {
System.out.println("靠鱼鳍移动!");
}
}

//蝙蝠类
public class Bat extends Mammal{
public void move() {
System.out.println("靠翼移动!");
}
}

//如果有很多个哺乳类动物的话,每一次都要重新定义一个move方法,很麻烦且代码冗余影响运行的速度

public class Main{

public static void main(String[] args) {
Whale whale = new Whale();
whale.move();

Bat bat = new Bat();
bat.move();

}

}

//我们可以这样修改

public class Main{

public static void main(String[] args) {

Mammal mammal1 = new Whale();//使用上转型每次只需要重写子类的方法就可以,不需要重新定义方法
Mammal mammal2 = new Bat();
mammal1.move();
mammal2.move();

}
}
 

  三、多态的实现方式

          1、上转型对象实现多态

              1.1、上转型对象与下转型对象 

                      上转型对象:子类创建的对象赋值给父类声明变量,则该对象称为上转型对象,这个过程称为对象上转型,对应于                 数据类型转换中的自动类型转换;

                      下转型对象:上转型对象再强制转换为创建该对象的子类类型的对象,即将上转型对象还原为子类对象,对应于数                  据类型转换中的强制类型转换。

                       注意:①上转型对象才能够对象下转型;

public class Test {
public static void main(String[] args) {
Mammal mammal = new Whale();//下转型对象
Whale whale =(Whale) mammal;//下转型对象,还原为鲸鱼类
}
}
                                  ②上转型对象不能操作子类新增的成员变量,不能调用子类新增的方法,因此如果要使用子类新增的属性                                         必须下转型

              1.2、上转型对象实现多态实例

//哺乳类(父类)
public class Mammal{
public void move(){
System.out.println("移动");
}
}
//鲸鱼类(继承自哺乳类)
public class Whale extends Mammal{
public void move(){
System.out.println("靠鱼鳍移动");
}
}
//测试类
public class Test {
public static void main(String[] args) {
Mammal mammal = new Whale();//上转型对象,父类类型的变量指向子类声明的对象
mammal.move();
}
}
 

  运行结果:运行结果表现出来的是Mammal里move方法的行为特征,编译时表现为父类的move方法的行为特征 ,多种行为状态,即为                        多态

     2、接口回调实现多态                      

                 2.1、什么是接口回调? 

                      接口回调描述的是一种现象:接口声明的变量指向其实现类实例化的对象,那么该接口变量就可以调用接口中的抽象方法,

                 编译时方法行为表现的是接口中的抽象方法,运行时方法行为表现的是接口实现类中重写该方法的行为特征,即为多态

                 2.2、接口回调实现多态实例

//接口
public interface IMammal {
void move();
}
public class Whale implements IMammal{
public void move(){
System.out.println("靠鱼鳍移动");
}
}
public class Test {
public static void main(String[] args) {
IMammal mammal = new Whale();
mammal.move();
}
}
  运行结果:编译时是接口的行为特征,运行时是接口实现类的行为特征

3、接口回调与上转型对象实现多态的区别与联系

    ①上转型对象多态的父类是普通类,接口回调都是父类是接口;

    ②接口回调父类方法更加的简洁,是抽象方法不需要有方法体;

    ③都是编译时显示父类方法行为特征,运行时显示子类行为特征。
--------------------- 

猜你喜欢

转载自www.cnblogs.com/ly570/p/10961098.html