面向对象-接口与多态

Posted samuraihuang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象-接口与多态相关的知识,希望对你有一定的参考价值。

* Java语言的继承是单一继承,一个子类只能有一个父类(一个儿子只能有一个亲爹)

 * Java语言给我们提供了一种机制,用于处理继承单一的局限性的,接口

 *

 * 接口:接口是一个比抽象类还抽象的类,接口里所有的方法全是抽象方法,接口和类的关系是实现,implements

 * interface

 *

 * 格式:

 * interface 接口名 {

 *

 * }

 

 

* 接口的成员特点:

 * 只能有抽象方法

 * 只能有常量

 * 默认使用public&abstract修饰方法

 * 只能使用public&abstract修饰方法

 * 默认使用public static final来修饰成员变量

 *

 * 建议:建议大家手动的给上默认修饰符

 *

 * 注意:

 * 接口不能创建对象(不能实例化)

 * 类与接口的关系是实现关系,一个类实现一个接口必须实现它所有的方法

 

* 类与类:继承关系,单一继承,多层继承

 * 类与接口:实现关系,多实现

 * 接口与接口的关系:继承关系,多继承

 

 

定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件。这点可以让我们将接口看做是一种只包含了功能声明的特殊类。

 

 

 

接口中的方法全是抽象方法,直接new接口来调用方法没有意义,Java也不允许这样干

 

类与接口的关系为实现关系,即类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements

 

其他类(实现类)实现接口后,就相当于声明:”我应该具备这个接口中的功能”。实现类仍然需要重写方法以实现具体的功能。

 

格式:

class implements 接口 {

重写接口中方法

 

1、接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量,其值不能改变。后面我们会讲解fnal关键字

2、接口中可以定义方法,方法也有固定的修饰符,public abstract

3、接口不可以创建对象。

4、子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类。

 

接口和抽象类的区别

1.共性:

不断的进行抽取,抽取出抽象的,没有具体实现的方法,都不能实例化(不能创建对象)

2.区别1: 与类的关系

(1)类与接口是实现关系,而且是多实现,一个类可以实现多个接口,类与抽象类是继承关系,Java中的继承是单一继承,多层继承,一个类只能继承一个父类,但是可以有爷爷类

(2)区别2: 成员

a.成员变量

抽象类可以有成员变量,也可以有常量

接口只能有常量,默认修饰符public static final

b.成员方法

抽象类可以有抽象方法,也可以有非抽象方法

接口只能有抽象方法,默认修饰符 public abstract

c.构造方法

抽象类有构造方法,为子类提供

接口没有构造方法

 

 

* 多态的前提:

 

 * 子父类的继承关系

 

 * 方法的重写

 

 * 父类引用指向子类对象

 

 *

 

 * 动态绑定:运行期间调用的方法,是根据其具体的类型

 

 

 

* 多态的成员特点:

 

 * 成员变量  编译时看的是左边,运行时看的左边

 

 * 成员方法  编译时看的是左边,运行时看右边

 

 * 静态方法  编译时看的是左边,运行时看的也是左边.因为使用变量去调用静态方法,其实相当于用变量类型的类名去调用

 

 *

 

 *

 

 * 编译时看的都是左边,运行时成员方法看的是右边,其他(成员变量和静态的方法)看的都是左边

 

 

 

* 多态的优缺点

 

 * 优点:可以提高可维护性(多态前提所保证的),提高代码的可扩展性

 

缺点:无法直接访问子类特有的成员

 

 

 

 

 

* final: 修饰符,可以用于修饰类、成员方法和成员变量

 

 * final所修饰的类:不能被继承,不能有子类

 

 * final所修饰的方法:不能被重写

 

 * final所修饰的变量:是不可以修改的,是常量

 

 *

 

 * 常量:

 

 * 字面值常量:1,2,3

 

 * 自定义常量:被final所修饰的成员变量,一旦初始化则不可改变

 

 *

 

 * 注意:自定义常量必须初始化,可以选择显示初始化或者构造初始化

 

 

以上是关于面向对象-接口与多态的主要内容,如果未能解决你的问题,请参考以下文章

Java面向对象(接口多态)

[面向对象杂谈]接口与多态

面向对象编程三大特性-封装、继承、多态

Python全栈之路系列----之-----面向对象4接口与抽象,多继承与多态)

#yyds干货盘点# Java面向对象之组合多态与接口

Python_015(面向对象(接口类,抽象类,多态,封装)