java多态(上)

多态

多态的实现可以借由向上转型和动态绑定机制来完成,其中,向上转型实现了将子类对象向上转型为父类类型;而动态绑定机制能识别出对象转型前的类型,从而自动调用该类的方法,两者相辅相成。

当我们在实际开发当中,同一个操作行为针对不同的参数返回不同的实例对象,完成不同的操作结果时,就比较使用多态的操作。

编译时多态:又叫设计时多态,通常是通过方法重载实现的

运行时多态:程序运行时动态决定调用哪个方法

java中的多态大多是指运行时多态

向上转型

必要条件:

  • 满足继承关系

  • 父类引用指向子类对象

    向上转型(也被称为隐式转型、自动转型–》父类引用指向子类实例)
    父类引用指向子类实例,可以调用子类重写父类的方法以及父类派生下来的方法,无法调用子类独有方法

    注意:父类中的静态方法无法被子类重写,所以向上转型之后,只能调用到父类原有的静态方法

    小类转型为大类

Animal one = new Cat();
Animal two = new Dog();

绑定机制

绑定就是将一个方法调用同一个方法所在的类连接到一起。Java中存在静态绑定和动态绑定两种。
其中,静态绑定是指在程序运行之前进行绑定(由编译器和链接程序完成的),也叫做前期绑定。动态绑定则是指在程序运行期间由JVM根据对象的类型自动的判断应该调用哪个方法,也叫做后期绑定。
静态绑定的示例:
h0ACtg.png
动态绑定的示例:
h0APhQ.png

向下转型

也被称为强制类型转换

子类引用指向父类对象,此处必须进行强制类型转换,可以调用子类特有的方法

注意:必须满足转换条件才能进行强转,向下转型时,不允许转为非原始类型,即哪来回哪去。

Cat temp = (Cat) one;

instanceof运算符:返回true/false 能判断是否满足向下转型的转换条件

例如:one instanceof Cat返回true;two instanceof Dog返回false

关于类型转换的应用问题

h0AZn0.png

关于向下转型已出现的错误总结

h0Ak1s.png

关于静态方法(static)是属于类共享的,这种方法只能被子类继承使用,不能被重写

抽象类

不允许实例化,可以通过向上转型,指向子类实例

用abstract修饰,可以:

public abstract class Animal{}

abstract public class Animal{}

应用场景:某个父类只是知道其子类应该包含怎么样的方法,但无法准确知道这些子类如何实现这些方法,比如父类定义了一个动物要吃东西的方法,但具体怎么吃,每种动物有不同的方法

抽象方法

抽象方法:不允许包含方法体{};子类中需要重写父类的抽象方法(子类也是抽象类的时候可以不重写父类的抽象方法)

包含抽象方法的类一定是抽象类,但抽象类中可以不包含抽象方法

static,final,private三者都不能与abstract并存(private只能在当前类中访问,final方法不允许被子类重写,static也不允许在子类中被重写)

关于抽象类应用总结

h0AFpj.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值