您的位置:首页 > 编程语言 > Java开发

【Java基础】多态

2019-04-10 20:14 88 查看

一、什么是多态

——多态是面向对象三大特征最核心的步骤,从某种意义上可以认为,封装和继承就是为多态准备的。

概念:允许不同类的对象对同一消息作出不同响应。在Java语言中,接口的多种不同的实现方式即为多态。

 

二、多态的分类

1.编译时多态(设计时多态):编译器在编译状态,就能对不同行为进行区分,通常用方法重载来实现。

2.运行时多态:直到Java程序运行时,系统才能够根据实例方法的类型动态决定调用哪个方法。Java通常指的就是运行时多态

 

三、多态(运行时多态)

1.实现多态的条件:

a.满足继承关系;(继承也可替换为实现接口)

b.方法重写;

c.父类引用指向子类对象。(向上转型)(接口引用指向实现类)

&&小知识点

1.向上转型(隐式转型、自动转型):父类引用指向子类对象;(孩子往父亲方向转型,所以向上)

[code]Father one = new Son();

意义:可以调用:

a.子类重写父类的方法;

b.父类自己派生下来的可以被子类直接使用的方法;

c.无法调用子类独有的方法。

2.向下转型(强制类型转换):子类引用指向父类对象,此处必须进行强转;

意义:可以调用:子类特有的方法。

条件:必须满足转型条件才能强转。instanceof 运算符用来判断左边对象是否为右边类型的实例,或者是否具有右边的特征;

用法:

2.多态的具体代码实现:

 

 

&&小知识点:如果父类和子类有一个完全相同的静态方法,是不构成重写关系的。所以向上转型之后,只能

调用到父类原有的静态方法,想调用子类自己的需要向下转型。

 

四、抽象类

1.产生背景

[code]Animal animal = new Animal("dog");
animal.eat();

语法没有问题,但是实例化animal没有意义。Java使用抽象类(abstract),限制实例化,避免写无意义代码。

2.应用场景:某个父类只知道子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。

3.使用方法:抽象类不允许实例化,可以通过向上转型实现,指向子类实例。

4.注意:子类必须重写抽象方法,当没有重写时,子类也是抽象类。

5.static,final,private不能和abstract并存。

 

五、接口

1.产生背景:

a.Java只支持单继承

b.解决一个类型中需要兼容多种类型特征的问题;

c.多个不同类型具有相同特征的问题。

 

2.特点

(1)访问修饰符默认public(不写也是public);

(2)当类实现接口时,需要实现接口中所有方法,否则需要设置该类为抽象类;

(3)接口中定义int a = 10;默认为public static final;

(4)jdk1.8新增的特性:

a.default有方法体,实现类可以不重写调用;

b.static有方法体,接口名.super.方法

(5)一个接口可以继承多个接口是继承

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: