java中多态的简单总结

所谓多态,是指不同类对象对同一消息作出的响应不同。

多态实现的三个条件:

1、继承

2、重写

3、父类引用指向子类对象(也就是对象向上转型  Person p=new Student();  )

前面一篇文章讲到了对象上下转型的具体操作步骤,但是没有说明具体应用场景,其实多态的表现和对象上转型是密切相关的。

场景如下,Person类有habite方法,Person类的子类Student类和Teacher类重写了habite方法。现在需要在另外一个类的方法show()里面调用habite()方法并进行一些处理,但是不知道调用的对象的是具体哪个子类的,我们可以对show方法进行重载,将两个不同类型的子类分别作为参数,但是这样做得坏处就是不利程序的扩展,而且重载两个方法会增加代码量。因为在show方法做得处理都是相同的,只是对象参数不同而已。因此,我们可以通过对象的上转型特点,只用一个方法处理不同的子类对象参数。代码如下:

首先建立Person类,Student类,Teacher。

public class Person {
    public  void habite(){
       //somesentence 
    }
}
public class Student extends Person {
    public void habite(){
        System.out.println("学生的爱好是篮球");
    }
}
public class Teacher extends Person {
    public void habite(){
        System.out.println("老师的爱好是喝茶");
    }
}

测试类:

public class TestPerson {
    public static void main(String[] args) {
        show(new Teacher());
        show(new Student());
    }

   public static void show(Person person){
       person.habite();
   }
}

执行结果如下:

老师的爱好是喝茶
学生的爱好是篮球

---------------------------------------------

比如现在来了新需求,我需要在show方法中执行一个子类特有的方法,这个时候只需要对参数进行向下转型(可以根据incetanceof关键字判断实例 )就可以完成修改。

代码如下:

public class TestPerson {
    public static void main(String[] args) {
        show(new Teacher());
        show(new Student());
    }

    public static void show(Person person) {
        person.habite();
        if (person instanceof Teacher){
            System.out.println("老师");
            Teacher teacher=(Teacher)person;
            //使用teacher对象执行老师类中的方法
        }else if (person instanceof Student){
            System.out.println("学生");
            Student student=(Student)person;
            //使用student对象执行学生类中的方法
        }
    }
}

 

执行结果:

老师的爱好是喝茶
老师
学生的爱好是篮球
学生

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值