九 Java特性之多态、抽象类、接口

九 Java特性之多态、抽象类、接口

一. 主要内容
在这里插入图片描述
在本次博客中,主要讨论以下几个问题:
1.Java三大特性之多态(重要): Java的三大特性是,继承、封装、多态。其中封装和继承已经介绍过,在本次博客中,主要介绍多态的特性。
2.抽象类:考虑一下这个问题,比如我们定义动物类时,明白这是一个抽象类。每一个动物的特性是不一样的,就拿最简单的eat来说,每个动物的表现也不同,所以我们无需对其定义具体方法,只需给出声明即可。
3.接口:在完成继承之后,我们要考虑到这个问题,对于某一类对象,例如鹦鹉类对象。并不是每一只鹦鹉都会说话,我们需要为某一类对象定义特殊性功能,这就要提供接口概念。
二. 多态
什么是多态?为什么要使用多态?
答:使用多态的主要目的是为了消除类型之间的耦合关系。我们可以这样浅显的理解多态:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
举例:鹦鹉属于鸟类,但它同时属于动物类,所以我们可以这样创建鹦鹉对象。
一方面:Parrot p=new Parrot();
另一方面: Animal a=new Parrot();
2.1 多态的必要条件
面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。
这三个条件分别是:
1.要有继承关系(前提)
2.要有方法重写(否则没有意义)
3.父类引用指向子类对象
2.2 多态的好处及弊端
好处:
1.提高了代码的维护性(继承保证)
2.提高了代码的扩展性(由多态保证)
弊端:不能使用子类特有的功能,这就引出了向下转型的概念
2.3 多态成员访问特点
1.成员变量:编译看左边,运行看左边。
2.构造方法:创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化。
3.成员方法:编译看左边,运行看右边。
4.静态方法:编译看左边,运行看左边。
需要注意的是:对于这个看左边看右边,可以这样理解。
以成员方法为例:

		Animal an=new Cat();
		an.eat();
		an.sleep();

编译看左边,运行看右边。以等号分界。用父类型 an调用方法时,先看父类型有无eat方法,若无,直接报错,若有调用子类重写的方法。
三. 抽象类
正如在第一部分介绍,引入抽象类是因为对于某一抽象事物,如动物类,它并不是一个具体的事物,每个具体动物eat方式也是不同的。所以,不用在动物类中做具体体现,只需给出声明即可。
3.1 抽象类的特点
1.抽象类和抽象方法必须用abstract关键字修饰
抽象类格式: abstract class 类名 {}
抽象方法格式: public abstract void eat();
2.抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
3.抽象类中可以有构造方法,但抽象类不能进行实例化,构造方法有的作用是用于子类访问父类数据时的初始化。
4.抽象类不能直接实例化,可按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
5.抽象类的子类,要么是抽象类,要么重写抽象类中的所有抽象方法。
四. 接口
什么是接口?为什么要定义接口?
答:在Java语言中, 接口(interface)是一些方法特征的集合。这些方法特征来自于具体方法,这些方法符合它们一般来自于一些在系统中不断出现的方法。一个接口只有方法的特征,而没有方法的实现,因此这些方法在不同的地方被实现时,可以具有完全不同的行为。在Java语言中,Java接口还可以定义public的变量。
定义接口的原因,则是我们需要为某一类对象定义特殊性功能,而大部分该类对象不需要实现该功能,这就要提供接口概念。
4.1 接口的特点
1.接口用关键字interface表示 格式: interface 接口名 {}
2.类实现接口用implements表示 格式: class 类名 implements 接口名 {}
3.接口不能直接实例化,可按照多态方式实例化
4.接口的子类
a:可以是抽象类。但是意义不大。
b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
4.2 接口的成员特点
成员变量:只能是常量,并且是静态的。默认修饰符:public static final
构造方法:接口没有构造方法。
成员方法:只能是抽象方法。 默认修饰符:public abstract
4.3 类与类,类与接口,接口与接口的关系
类&类:继承关系,只能单继承,可多层继承
类&接口:实现关系,可单实现,可多实现。可在继承一个类时实现多个接口
接口&接口:继承关系,可单继承,也可多层继承

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值