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

java基础知识--抽象类和接口

2017-10-31 19:56 330 查看

本人的GitHub:戳我一下

抽象类:

如果自下向上的在类的继承层次结构中上移(继承层次结构中父类在上,子类在下),位于上层的类更具有通用性,也更加抽象,因此,java中有一种类不能实例化对象,只能被子类继承,这样的类就是抽象类。

抽象方法是只定义,但没实现的方法,例如:

public void getName();//注意这里的分号。

抽象类中可以没有抽象方法,但是一个类只要有一个抽象方法这个类就是抽象类。

抽象方法和抽象类通过”abstract”关键字定义,例如:

抽象类:public abstract class Person {}

抽象方法:public abstract void getName() ;

抽象方法充当着占位的作用,它的具体实现在子类中。一个子类继承一个抽象类有两种情况:

一种是在子类中没有实现全部的父类的抽象方法,这样子类也是一个抽象类,必须用“abstract”关键字。

另一种是实现全部的父类的抽象方法,这样子类就不是抽象的。

注意:可以定义一个抽象类的引用,但必须指向实现了所有抽象方法的子类

接口:

接口不是类,而是对类的一组需求描述。

接口中的方法只定义不实现(后来可以实现静态方法),接口中不能包含普通域(可以包含静态常量)。

接口中的方法自动的设置为public,接口中的域自动设置为public static final。

定义一个接口:

public interface Person {
String getName();
}


一个类实现一个接口:

class Student implements Person{
string name;
String getName() {
return name;
}
}


一个类实现一个接口需要两个步骤:

将类声明为实现给定的接口。

实现接口中的所有方法

因为接口并不是类,接口也不可以实例化,这样一看你可能会感觉接口和抽象类没什么区别,但是一个类可以实现多个接口,只能继承一个父类,通过接口,java间接的实现了多重继承。

java se8之后可以在接口中实现静态方法。

可以为接口方法提供一个默认实现,必须用default修饰符标记这样的方法,一个类实现一个接口,如果这个接口中一个方法有默认实现,那么这个类可以不再实现这个方法(极度不推荐这样做,除非确实不需要实现这个方法)。

解决默认方法冲突:

如果一个接口中将一个方法定义为默认方法,然后又在父类中或另一个接口中定义了同样的方法,java中这样规定:

父类优先。如果父类提供了一个具体方法,同名且具有相同参数类型的默认方法会被忽略

接口冲突。如果两个接口提供了一个同名且同参数的默认方法,那么实现这两个接口的类必须覆盖这个方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java