java 多态详解_java之多态详解

前言

什么叫多态?多态就是一种事物可以有多种表现形式

多态三要素

1.被动方必须有继承关系

2.子类一般都要重写父类方法

3.必须将主动方的功能函数的参数设置为 被动方父类的类型

举个例子司机开车

假如说司机会开汽车  我们需要定义个汽车的类  然后在司机类中添加会开汽车的的方法

假如说司机会开卡车 我们需要再定义一个卡车的类  然后在司机类中添加会开卡车的方法下面看下传统的调用方式  代码如下:

class Car

{

private String name;

//无参 构造方法

public Car(){}

// 有参构造方法

public Car(String name){

this.name = name;

}

public void setName(String name){

this.name = name;

}

public String getName(){

return this.name;

}

public void run(){}

}

class Bus extends Car

{

public Bus(){}

public Bus(String name){

super(name);

}

public void run(){

System.out.println("公交车在跑");

}

}

class SmallCar extends Car

{

public SmallCar(){}

public SmallCar(String name){

super(name);

}

public void run(){

System.out.println("小轿车在跑");

}

}

class Drivers

{

//假如司机会开公交车

public void driverBus(Bus b){

b.run();

}

//假如司机会开小轿车

public void driverSmallCar(SmallCar smcar){

smcar.run();

}

}

class TestDt

{

public static void main(String[] args)

{

Drivers d = new Drivers();

//司机开公交车

d.driverBus(new Bus("公交车"));

d.driverSmallCar(new SmallCar("小轿车"));

}

}

正如上面的列子 在添加司机开其他的车 就会重复上面的行为 缺点是 扩展性比较差,后期代码维护困难。

然后我们用多态的写法优化上述例子 代码如下:

class Car

{

private String name;

//无参 构造方法

public Car(){}

// 有参构造方法

public Car(String name){

this.name = name;

}

public void setName(String name){

this.name = name;

}

public String getName(){

return this.name;

}

public void run(){}

}

class Bus extends Car

{

public Bus(){}

public Bus(String name){

super(name);

}

public void run(){

System.out.println("公交车在跑");

}

}

class SmallCar extends Car

{

public SmallCar(){}

public SmallCar(String name){

super(name);

}

public void run(){

System.out.println("小轿车在跑");

}

}

class Drivers

{

public void driverCar(Car car){

car.run();

}

}

class TestDt

{

public static void main(String[] args)

{

Drivers d = new Drivers();

d.driverCar(new Bus("公交车"));

d.driverCar(new SmallCar("小轿车"));

}

}

比较第一种写法  假如司机还会开其他的车 只需要添加会开这种车的类就行  司机类不需要再添加其它功能方法 。代码简介  后期维护比较方便  这种编写多态的形式也叫向上转型。

但是要想调用子类独有的方法必须向下转型才能调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值