多态

多态是Java中比较重要的概念。
继承:从字面理解就是一种层次联结模型。有些说法说是,鼓励类的重用,更加符合新手的说法,就是。在现有的类的基础上(基类),创建的新类继承这个基类,从而拥有基类的属性和自己的属性。

多态意味着“不同的形式”。在面向对象的设计中,我们拥有从基类中继承的不同子类,以及使用接口的不同形式,不同的动态绑定方法。

动态绑定

class Task{
    void f(){
        System.out.println("a");
    }
}

public class Person extends Task{
    void f(){
    System.out.println("b");
}
    public static void mian(String[] args){
        Task t = new Person();
    }   
}

Task t = new Person() . 会调用谁的方法呢?
你可以去运行一次,绝对是Person的方法,我们用的Task 的引用去实现的Person类,最终确实实现的Person的方法,虽然Person继承的Task方法,但是已经覆盖了。在这个过程中,对于Java来说,编译的时候并不会报问题,所以没有出错。他之所以可以运行是因为,Java具备一种动态绑定的行为,在运行时根据对象的类型进行绑定,他不同于C的前期绑定,Java在编译时并不知道我们具体需要调用哪个对象,但是方法调用机制可以找到正确的方法体,便于在运行期能够找到正确的方法体,返回正确的行为。

Java的多态都是通过这种动态绑定实现的。

关于继承的设计

继承不得不说是一种比较巧妙的东西,继承现有的类实现新的类,来建立新类。确实比较精妙,但若是首先考虑使用继承来做,无疑会加重我们的负担,官方也建议使用组合的方式来产生动态的行为改变,这会更加爱灵活。
设计原则:用继承来表达行为间的差异,并用字段表达状态上的变化。(来自 Thinking in Java)

is-a 关系

采用“纯粹”的方式来创建继承层次结构似乎是一种最好的方式,基类只有经过已经建立的方法才可以在子类中覆盖。这种被称为“is-a”关系,是因为一个类已经确定了它应该是什么,继承可以确保所有的子类具备基类的所有接口,而且绝对不会少。也可以认为这是一种纯替代,因为子类可以完全替代基类。

子类可以进行向上转型,因为子类和基类拥有相同的接口,不需要知道正在处理的对象的确切类型,这一切都是通过多态实现的。

只要开始考虑这样设计方式,那么就只有这种is-a的纯粹的方式最佳,Java似乎也在允许我们这样做,这更像是is-like-a的放方式,因为子类可以看作就是一个基类,他拥有基类所有的特征,还有自己的特性。

向上转型有一种缺点,那就是会丧失子类的特性,因为基类不能范访问到子类的特性,也没有子类的特性的接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值