目录
一、抽象类
抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。
对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。
1、抽象类的格式
public abstract class 类名{} //抽象类
访问修饰符 abstract 返回值类型 方法名 (参数列表) //抽象方法
注意:继承抽象要么重写抽象类中所有的抽象方法,要么是抽象类
2、抽象类与普通类的区别
抽象类要用abstract修饰
普通类可以实例化,抽象类不能实例化
如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
3、抽象方法与普通方法的区别
普通方法必须要有方法体,抽象方法不能有方法体(大括号也没有)
抽象方法要用abstract修饰
抽象方法必须存在于抽象类中
4、抽象类与抽象方法的使用
抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类
如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
没有抽象构造方法,也没有抽象静态方法
抽象类中可以有非抽象的构造方法,创建子类的实例时可以调用
二、接口
接口是一种规范或标准,它们可以约束类的行为,是一些方法特征的集合,但是没有方法的实现。
1、接口的定义和使用
接口用关键字interface来定义、接口不能实例化
语法:
定义接口的语法:
[访问修饰符] interface 接口名 extends 父接口1,父接口2,…{
//常量定义
//方法定义
}
接口和类之间是实现关系,通过implements关键字表示
语法:
类实现接口的语法:
[访问修饰符] class 类名 extends 父类名 implements 接口1,接口2,…{
//类成员
}
实现类还可以在继承一个类的同时实现多个接口
public class 类名 extends 父类 implements 接口1,接口2....{}
2、接口特性
1、接口的命名规则与类相同。如果修饰符是public,则该接口在整个项目中可见;如果省略修饰符,则该接口只在当前包可见。
2、接口中可以定义常量,不能定义变量。接口中的属性都会自动用public static final 修饰,即接口中的属性都是全局静态常量。
3、接口中方法自动用public abstract修饰,接口中所有方法都是抽象方法。
4、接口不能实例化,接口中不能有构造方法。
5、接口直接可以通过extends实现继承关系,一个接口可以继承多个接口,但是接口不能继承类。
6、接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。
3、面向接口编程
(面向对象六大设计原则之一)面向接口编程就是先把客户的业务逻辑线提取出来,作为接口,业务具体实现通过该接口的实现类来完成。当客户需求变化时,只需编写该业务逻辑的新的实现类,替换该接口的实现类就可以完成需求,不需要改写现有代码,减少对系统的影响。
接口体现了约定和实现相分离的原则
面向接口编程就意味着:开发系统时,主体架构使用接口,接口构成系统的骨架,这样就可以通过更换实现接口的类来实现更换需求。
4、面向接口编程的优点
1、降低代码间的耦合性
2、易于程序的扩展,提高了程序的可扩性性
3、提高了程序的可维护性
5、抽象类和接口的联系和区别
相同点:1、代表系统的抽象层 2、都不能被实例化 3、都能包含抽象方法:用于描述系统提供的服务,不必提供具体实现
不同点:1、在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法 2、抽象类便于复用,接口便于代码维护 3、一个类只能继承一个直接的父类,但可以实现多个接口
6、接口和类之间的关系:
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
7、接口与接口的关系:
继承关系,可以单继承,也可以多继承
三、接口补充
1、JDK7以前只能定义抽象方法
2、JDK8以后接口新增的方法
1、允许在接口中定义默认方法,需要使用关键字default修饰
2、允许在接口中定义静态方法,需要用static修饰
作用:解决了接口升级的问题
接口中默认方法定义格式:
格式:public default 返回值类型 方法名(参数列表){}
例如:public default void show(){}
接口中默认的方法注意事项:
默认方法不是抽象方法,所以不强制被重写,但是需要重写的时候要去掉default关键字
public 可以省略,default不能省略
如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写
//Inter接口
public interface Inter {
//抽象方法
public abstract void method();
//接口中的默认方法
public default void show(){
System.out.println("接口中的默认方法----show")
}
}
//实现类重写的抽象方法
//默认方法可以不用重写
public class InterImpl implements Inter{
@Override
public void method(){
}
}
接口中静态方法的定义格式:
格式:public static 返回值类型 方法名(参数列表){}
例子:public static void show (){}
注意:
静态方法只能通过接口名调用,不能通过实现类或者对象名调用
public 可以省略,static 不能省略
//Inter接口
public interface Inter {
//抽象方法
public abstract void method();
//接口中的默认方法
public default void show(){
System.out.println("接口中的默认方法----show")
}
//静态方法1
public static void show1(){
System.out.println("show1")
}
//静态方法2
public static void show1(){
System.out.println("show2")
}
}
3、JDK9新增的方法
接口中私有方法的定义
格式1:private 返回值类型 方法名(参数列表){}
例如: private void show(){}
格式2:private static 返回值类型 方法名(参数列表){}
例如: private static void show(){}
//普通的私有方法,是给默认方法服务的
private void show3(){
System.out.println("show3")
}
//静态的私有方法,是给静态方法服务的
private static void show1(){
System.out.println("show4")
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/93380.html