浅谈多态-JavaGogo

简介

面向对象有四个基本特性:封装、继承、抽象、多态。其中封装、继承、抽象可以看作是多态的基础,而多态可以看作是封装、继承、抽象的表现。

不同类的对象对同一方法体现出不同的功能就叫做多态。

示例:

接口:定义具有共同方法的接口

public Interface Person {

    public void getSex();

}
实现类1:

public class Man implements Person {

    public void getSex(){

        System.out.println("男人");

    }
}

实现类2:

public class Woman implements Person {

    public void getSex(){

        System.out.println("女人");

    }
}
测试类:

public static void main(String[] args) {
    Person person = new Man();
    person.getSex();
    person = new Woman();
    person.getSex();
}
控制台输出结果:

男人

女人

多态的必要条件

多态的存在,主要是解耦的作用,对于现在使用的23中设计模式来说,大部分都是基于多态的。
多态的实现,必须遵守一些条件,如下:
    1. 有继承关系
    2. 子类重写父类方法
    3. 父类引用指向子类对象

注意:子类要能重写父类方法,其方法不能被下面几个关键字所修饰:

    1. static 修饰,其方法属于类,不属于实例

    2. final 修饰,被其修饰的方法不能被子类重写

    3. private 修饰,被其修饰的方法,对子类不可见

        protected 修饰,只局限于对子类使用,而该子类不能被外部调用,严格来说,不能完全符合多态的特性

多态的分类

1. 编译时多态,即方法的重载,这是一种静态分派
2. 运行时多态,即方法的重写,这是一种动态分派

分析多态的几条原则

如果我们有一个父类Person,有一个子类Man
1. 向上转型是自动的,即Person person = new Man();是自动的,不需要强转
2. 向下转型要强转,即Man man = new Person();是无法编译通过的,必须要Man man = (Man)new Person(); 让父类知道它要转成具体哪个类
3. 父类引用指向子类对象,子类对象重写了父类方法,调用父类的方法,实际调用的是子类重写了的父类的该方法。即Person person = new Man(); person.getSex()实际上调用的是Man中的getSex()方法

参考文档:http://www.cnblogs.com/xrq730/p/4820237.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值