Java的基本特征之一——多态

多态是面向对象程序设计中代码重用的一个重要机制,它表示当同一个操作作用在不同对象时,会有不同的语义,从而产生不同的结果。

多态的两种表现方法:
一、方法的重载(overload)。重载是指同一个类中许多个同名方法,但这些方法有着不同的参数,因此在编译时就可以选择确定到底调用哪个方法,它是一种编译时多态,重载可以被看成一个类方法中多态性。
二、方法的重写(override)子类可以覆盖父类的方法,因此同名的方法会在父类和子类有着不同的表现形式。

在Java中,父类的引用变量可以指向父类的实例,也可以指向子类的实例,同理,接口的引用也可以指向它实现类的实例对象。程序调用的方法在运行时才动态绑定,动态绑定指的是一个方法的调用和一个方法的主体连接在一起,就是引用变量所指向的具体实例方法,也就是内存正在运行那个方法,而不是引用变量的类型中定义法人方法。通过这种动态绑定的方法实现了多态。由于只是运行时才能确定调用哪个方法,因此通过方法重写实现的多态成为运行时多态。

重载实现多态性示例:

public class Parents {
    public void method(){
        System.out.println("我是无参数的方法");
    }
    public void method(String name){
        System.out.println("我是有参数的方法");
    }
}
public static void main(String[] args) {
        Parents p1=new Parents();
        p1.method();
        p1.method("小明");
    }
    }

由上面的例子可以看出我们在编译时就可以选择执行哪个方法,可以根据自己的需求选择有参数的方法还是无参数的方法。

重写实现多态性示例(为了方便演示我把多个公共类列在了一起,实际这样是不对的):

public class Person {
public void eat(){
    System.out.println("人需要吃饭维持生命");
}
}
   
}
public class Parents extends Person{
    public  void eat(){
        System.out.println("大人吃饭不会挑食");
    }
}
public class Child extends Person {
   public void eat(){
       System.out.println("小孩子不好好吃饭,爱吃零食");
   }
}
public class Dead extends Person {
    
}

public class Main {
    public static void main(String[] args) {
       Person person;
       person=new Child();
       person.eat();
       person=new Parents();
       person.eat();
       person=new Dead();
       person.eat();
    }
}

执行结果:

小孩子不好好吃饭,爱吃零食
大人吃饭不会挑食
人需要吃饭维持生命

从上面的例子我们可以看到同样是person.eat()方法,却出现了不同的结果。这就是通过重写体现了Java的多态性。还可以看出因为Dead类没有重写eat方法,在运行时,输出的是Person的eat()结果,在我们运行之前我们是不知道结果的,只有运行完毕时才知道,所以重写体现的多态是运行时多态。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值