赞
踩
目录
抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。
对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。
- public abstract class 类名{} //抽象类
-
- 访问修饰符 abstract 返回值类型 方法名 (参数列表) //抽象方法
-
注意:继承抽象要么重写抽象类中所有的抽象方法,要么是抽象类
抽象类要用abstract修饰
普通类可以实例化,抽象类不能实例化
如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
普通方法必须要有方法体,抽象方法不能有方法体(大括号也没有)
抽象方法要用abstract修饰
抽象方法必须存在于抽象类中
抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类
如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
没有抽象构造方法,也没有抽象静态方法
抽象类中可以有非抽象的构造方法,创建子类的实例时可以调用
接口是一种规范或标准,它们可以约束类的行为,是一些方法特征的集合,但是没有方法的实现。
接口用关键字interface来定义、接口不能实例化
语法:
- 定义接口的语法:
- [访问修饰符] interface 接口名 extends 父接口1,父接口2,…{
- //常量定义
- //方法定义
- }
接口和类之间是实现关系,通过implements关键字表示
语法:
- 类实现接口的语法:
- [访问修饰符] class 类名 extends 父类名 implements 接口1,接口2,…{
- //类成员
- }
-
- 实现类还可以在继承一个类的同时实现多个接口
- public class 类名 extends 父类 implements 接口1,接口2....{}
1、接口的命名规则与类相同。如果修饰符是public,则该接口在整个项目中可见;如果省略修饰符,则该接口只在当前包可见。
2、接口中可以定义常量,不能定义变量。接口中的属性都会自动用public static final 修饰,即接口中的属性都是全局静态常量。
3、接口中方法自动用public abstract修饰,接口中所有方法都是抽象方法。
4、接口不能实例化,接口中不能有构造方法。
5、接口直接可以通过extends实现继承关系,一个接口可以继承多个接口,但是接口不能继承类。
6、接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。
(面向对象六大设计原则之一)面向接口编程就是先把客户的业务逻辑线提取出来,作为接口,业务具体实现通过该接口的实现类来完成。当客户需求变化时,只需编写该业务逻辑的新的实现类,替换该接口的实现类就可以完成需求,不需要改写现有代码,减少对系统的影响。
接口体现了约定和实现相分离的原则
面向接口编程就意味着:开发系统时,主体架构使用接口,接口构成系统的骨架,这样就可以通过更换实现接口的类来实现更换需求。
1、降低代码间的耦合性
2、易于程序的扩展,提高了程序的可扩性性
3、提高了程序的可维护性
相同点:1、代表系统的抽象层 2、都不能被实例化 3、都能包含抽象方法:用于描述系统提供的服务,不必提供具体实现
不同点:1、在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法 2、抽象类便于复用,接口便于代码维护 3、一个类只能继承一个直接的父类,但可以实现多个接口
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
继承关系,可以单继承,也可以多继承
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")
- }
-
-
- }
接口中私有方法的定义
- 格式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")
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。