接口和多态

一、接口

(一)概述

1.广义:一切定义规则的事物都是接口

2.狭义:Java中用于定义方法声明的规则就是接口,Java的接口中,定义的所有方法都是抽象方法

3.好处:将方法的调用和方法的实现分开了,可以降低代码之间的耦合度,可以提高开发效率

(二)特点

1.定义格式

interface 接口名{}

2.接口编译之后也会生成一个.class文件

3.接口中只能定义抽象方法,不能有方法的实现

4.接口的实现:使用类,通过implements关键字类实现接口

(1)格式

class 类名 implements 接口名{}

(2)接口中只有规则没有实现,我们通过类去添加规则的实现,不同的类可以实现相同的接口,

给予接口不同的实现

5.接口不能创建对象,我们通过子类实现,子类创建对象调用方法

6.接口实现类的用途

(1)当接口的实现类实现了接口中所有的抽象方法,这个类就是一个普通类,可以创建对象调用

方法

(2)当接口的实现类没有实现了接口中所有的抽象方法,这个类就是一个抽象类,就需要进一步

的子类继承该抽象类,实现所有的抽象方法

(三)接口中成员的特点

1.成员变量:没有,接口中只能定义常量不能定义变量,当我们定义常量时,会默认加上public

static final

2.成员方法:有,只能是抽象方法,前面的public abstract可以省略,建议手动加上

3.构造方法:没有,因为没有成员变量,没有赋值的必要,所以没有构造方法

(四)类与类、类与接口、接口与接口

1.类与类:继承关系,使用extends关键字,支持单继承、多层继承

2.类与接口:实现关系,使用implements关键字

(1)支持:单实现,多实现,不支持多层实现

(2)单实现

class 类名 implements 接口名 { 实现接口中所有的抽象方法 }

abstract class 类名 implements 接口名 { 实现接口中部分抽象方法 }

(3)多实现

class 类名 implements 接口1, 接口2, 接口3... { 实现接口中所有的抽象方法 }

此格式不存在安全隐患,就算多个接口中有同名的方法,但是再同一个实现类中,能对应的方法体

只有一个,接口中只有方法的声明,没有引用

(4)一个类再实现多个接口的同时还能够继承一个类

class 子类类名 extends 父类类名 implements 接口1, 接口2, 接口3... { 实现接口中所有的抽象方法;

重写父类中继承来的方法; }

3.接口与接口

(1)支持单继承、多继承、多层继承

(2)接口的多继承格式

interface 接口 extends 接口1, 接口2, 接口3... { 相等于整合了声明上所有接口的抽象方法; }

4.设计思路

(1)   类一般定义事物固有的属性和行为

(2)接口一般用于定义事物通过扩展或者学习而来的功能

二、多态

(一)概述

1.事物的多种状态

2.对象的多态性:同一个对象,可能具有不同的名称,可以有不同类型的引用指向它。本质:同一

个对象,有不同的描述

3.类的多态性:同一个类型,可能有不同的子类实现,同一个类型的引用,可能会指向不同子类的

对象。本质:同一个名字和描述,可能在不同场景下有不同的实现

4.多态的前提

(1)要有继承

(2)要有方法的重写

(3)父类引用指向子类对象

(二)多态中成员变量的特点

1.编译看左边,运行看左边

2.编译看左边:如果左侧父类中没有定义相关的变量,编译就会报错

3.运行看左边:如果左侧父类中有对应的成员变量,就会执行父类中成员变量的值

(三)多态中成员方法的特点

1.编译看左边,运行看右边

2.编译看左边:如果左侧父类中没有定义相关的方法,编译就会报错

3.运行看右边:如果右侧对象所属类型中有相应的方法,就会执行对象所属类型的方法也就是子类

的方法

4.在访问成员方法时,进行动态绑定,判断当前对象到底属于哪个类型,就会去具体的绑定所属类

型的对象

5.动态绑定:在程序运行的过程中,会具体的判断当前对象到底属于哪个类型的对象,对象属于哪

个类型,就执行该类型中的方法

6.动态绑定只发生在运行期,所以编译期必须通过,动态绑定只针对非静态方法

(四)多态中静态方法的特点

1.编译看左边,运行看左边

2.最终解释

(1)静态变量:存储在方法区的静态区,被所有对象共享,不随着对象的变化而变化,所有的对

象具有相同的静态变量

(2)静态方法:只会根据引用所述的父类类型,来决定要运行的内容,和对象没有关系,不会随

着对象变化

(3)多态讨论的是对象的情况,静态和对象没有关系,所以静态成员只根据类来讨论,不用考虑

多态性

(五)类型转化

1.向下转型

(1)在多态中是父类引用指向子类对象,讨论的范畴是基于父类范畴的

(2)如果子类对象想要执行自己的所属类型特有的方法,就要从父类引用指向子类对象变为本类

引用指向本类对象

(3)格式:(目标类型)要转换的类型

2.向上转型

原本使用本类引用指向本类对象,变成了父类引用指向子类对象。本质:缩小了访问范围,减少了

访问权限

(六)多态的好处

1.提高了代码的可扩展性

2.在方法的参数列表中定义父类的引用,将来转入子类的对象都可以使用

3.在实际的开发过程中,对象的来源非常广泛,例如:自己new的对象;调用方法返回的对象;框

架底层利用反射机制自动创建的;人为填充的;如果使用之前本类引用指向本类对象,接收对应

的对象难度比较大,可以结合多态,保证接收的遍历

(七)instanceof

1.是一个关键字,是一个运算符,结果是一个布尔值

2.格式:A instanceof B

3.作用:A是一个对象,B是一个类型,用于判断A对象是否和B类型有关

4.有关

(1)A对象是B类型的对象

(2)A对象是B类型子类的对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值