JAVA——多态的应用

多态的两种实现方式

 1   使用父类作为方法形参

 2   使用父类作为方法返回值

(注: 当作为参数的父类是普通类或者抽象类时,构成继承多态; 当作为参数的父类是一个接口时,构成接口多态)

1、使用父类方法作为形参( 形式参数的类型:  ①基本类型     ②引用类型  )

普通类形参:   当一个形参希望我们传入的是一个普通类时,我们实际上传入的是该类的对象/匿名对象

抽象类形参:   当一个形参希望我们传入的是一个抽象类时,我们实际上传入的是该类的子类对象或子类匿名对象

接 口 形 参 :   当一个形参希望我们传入的是一个接口时,我们实际上传入的是该类的实现类对象或实现类匿名对象

注          意  :     当一个方法的形参是引用类型的时候,需做非空判断,以免出现类型转换异常


2、 使用父类方法作为返回值( 返回值的类型:  ①基本类型     ②引用类型  )

  普通类: 当一个方法的返回值是一个普通的类时,实际上返回的是该类的对象,我们可以使用该类的对象接收

  抽象类: 当一个方法的返回值是一个抽象类时,实际上返回的是该抽象类的子类对象,我们可以使用该抽象类接收

  接    口:  当一个方法的返回值是一个接口时,实际上返回的是该接口的实现类对象,我们可以使用接口接收

                     (注:当方法的返回值类型是引用类型的时候,可以使用链式调用)

3、 代码演示

public class Polymorphism {

public static void main(String[] args) {

}

}

interface Ivehicle {

public abstract void run();

public abstract void show();

}

abstract class AbsTool {

abstract void absmethod();

}

class Car extends AbsTool implements Ivehicle {

public void absmethod() {

System.out.println("实现父类抽象方法");

}

public void run() {

System.out.println("实现接口的run方法");

}

public void show() {

System.out.println("实现接口的show方法");

}

// 抽象类AbsTool作为形参,传入的实参应是其(匿名)子类Car的(匿名)对象:new car();

public void method1(AbsTool s) {

System.out.println("使用抽象类作为形参");

}

// 接口Ivehicle作为形参,传入的实参应是其实现类Car的(匿名)对象:new car();

public void method2(Ivehicle s) {

System.out.println("使用接口作为形参");

}

// 抽象类AbsTool作为返回值类型,返回的应是其子类Car的(匿名)对象:new car();

public AbsTool method3() {

System.out.println("返回AbsTool类的子类对象");

return new Car();

}

// 接口Ivehicle作为返回值类型,返回的应是其实现类Car的(匿名)对象:new car();

public void method4(Ivehicle s) {

System.out.println("使用接口作为形参");

}

}

class Bmw extends Car {

// 普通类Car作为形参,那么应传入的实参是该普通类Car的对象,例如:new car();

public void method5(Car s) {

}

// 普通类Car作为返回值类型,返回应是该普通类Car的对象,例如:new car();

public Car method6() {

return new Car();

}

}

你可能感兴趣的:(JAVA——多态的应用)