抽象类接口
Posted ldd525
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象类接口相关的知识,希望对你有一定的参考价值。
抽象类+接口
一、抽象类
1.1 什么是抽象类?
一个类中没有足够的信息来描绘一个具体的对象的类就是抽象类。
1.2 抽象类的特点?
- 抽象类中的可以存在抽象方法和非抽象方法。
- 抽象类不能被实例化。
1.3 抽象方法
- 抽象方法没有方法体。
- 抽象方法只能中存在抽象类中
1.4 抽象类与抽象方法定义:
抽象类的定义格式
abstract class 类名字 {
}
抽象方法定义格式:
修饰符 abstract 返回值类型 方法名 (参数列表);
代码示例:
public abstract class A(){//抽象类
public abstract void show(); //抽象方法
}
1.5 注意事项:
关于抽象类的使用,以下为语法上要注意的细节,虽然条目较多,但若理解了抽象的本质,无需死记硬背。
抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。
抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。
抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。
理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。
面试题
一个类可以继承几个父类?(一个,java是单继承语言,但可以多层继承。)
二、接口
2.1 概述
接口是java中的一种引用数据类型,是方法的集合。 果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法(JDK 9)。
2.2 接口的定义
接口的定义类似于类的定义,使用的关键字是interface
,也会被编译成.class文件,但需要明确它不是类,而是另外一种数据类型。
引用数据类型:数组、类、接口 接口不能创建对象,但可以被实现,(
implements
关键字),一个实现接口的类,需要实现接口中的所有的抽象方法,创建实现类的对象,就可以调用这些方法。
2.3 接口的定义
public interface 接口名称{
//抽象方法
//默认方法
//静态方法
//私有方法
}
抽象方法:使用
abstract
关键字修饰,可以省略,没有方法体。该方法供子类实现。默认方法:使用
default
修饰,不可省略,供子类调用或重写。静态方法:使用
abstract
关键字修饰,不可省略,供接口直接调用。私有方法:使用
private
关键字修饰,供接口中默认方法或静态方法使用。
示例:
public interface InterfaceName{
public abstract void method();//抽象方法
public default void method() {//默认方法
// 执行语句
}
public static void method2() {//静态方法
// 执行语句
}
private void method() {//私有方法
// 执行语句
}
}
2.3 接口的实现
接口与类为实现关系,接口的实现与类的继承相似,使用implements
关键字。 非抽象子类实现接口:必须重写接口中所有抽象方法。
格式:
class 类名 implements 接口名 {
// 重写接口中抽象方法【必须】
// 重写接口中默认方法【可选】
}
示例: 接口的定义:
public interface LiveAble {
// 定义抽象方法
public abstract void eat();
public abstract void sleep();
}
定义实现类:
public class Animal implements LiveAble {
@Override
public void eat() {
System.out.println("吃东西");
}
?
@Override
public void sleep() {
System.out.println("晚上睡");
}
}
测试类:
public class InterfaceDemo {
public static void main(String[] args) {
// 创建子类对象
Animal a = new Animal();
// 调用实现后的方法
a.eat();
a.sleep();
}
}
2.4 接口的多实现
一个类可以实现多个接口并且,一个类能继承一个父类,同时实现多个接口。
在继承体系中,一个类只能继承一个父类。
格式:
class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3... {
// 重写接口中抽象方法【必须】
}
[extends 父类名 ]: 表示可选操作。如果有继承,必须放在实现的前边。
2.5 接口的多继承
一个接口能继承另一个或者多个接口,这和类之间的继承比较相似。接口的继承使用 extends
关键字,子接口继承父接口的方法。代码如下:
定义父接口:
interface A extends B{
public void method();
}
?
interface B {
public void method1();
}
定义子接口:
interface D extends A{
@Override
public void method() {
System.out.println("DDDDDDDDDDDDDD");
}
@Override
public void method1() {
System.out.println("EEEEEEEEEEEEEEE");
}
}
2.6 抽象类和接口的区别 :
-
抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的。
-
接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法。
-
一个类只能继承一个抽象类,而一个类却可以实现多个接口。
----------------------------------------今天总结到此结束--如有不错误之处望指正--------------------------------------------、
!-->!-- /*>
以上是关于抽象类接口的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin接口和抽象类 ( 接口属性和方法定义 | 接口默认方法实现 | 抽象类 )