1. 抽象类
1.1 抽象方法理解
定义:
只有方法的申明,没有具体的实现即方法体。
例如:
abstract void test();
注意:
抽象方法必须使用abstract修饰,否则编译时会报错。
1.2 抽象类的定义
定义:
包含抽象方法的类,称为抽象类。
注意:
这种理解是有些片面的,一个抽象类可以不包含抽象方法;但是实际使用中不会
这样定义。因为抽象类是不可以创建对象的,如果不包含抽象方法的话就失去了定义
抽象类的实际意义了。
1.3 抽象类和普通类的区别
1.抽象方法必须被访问修饰符public或protected修饰,否则子类无法实现抽象方
法。(编译不通过)
2.抽象类不能创建对象
3.一个类继承于抽象类,子类必须实现父类所有的抽象方法;否则将子类定义为
abstract。
1.4 抽象类为什么不能创建对象?(个人理解,仅供参考)
1.抽象类包含抽象方法,所包含的信息不够具体,因而构建的对象也不完整
2.java本身也限制了这种操作,编译时会报错
2. 接口
2.1 接口的理解
定义:
接口可以包含变量(public static final)和方法,是对一类事物属性和方
法更高程度的抽象,对修改关闭,对扩展开放,体现了开闭原则。对外提供一种统一的
协议,给事项接口的对象提供统一的属性,所以接口的属性必然是常量,只能读不能改
注意:
1.接口中的变量被隐式的指定为public static final 即常量,一般情况下
接口中不定义变量。
2.接口中的方法被隐式的指定为public abstract
例如:
源码:
public interface Test{
void test();
}
编译后:
public abstract interface Test{
public abstract void test();
}
2.2 JDK1.8接口的新特性
接口中除了定义抽象方法外可以定义静态方法和default默认方法了
静态方法的调用:
通过接口名调用即可。
default方法的调用:
通过实例对象调用。
2.3 抽象类和接口的区别
1.抽象类可以提供成员方法的实现细节,接口中只能存在public abstract方法,
JDK1.8之后接口中可以定义static和default方法弥补了这一点。
2.抽象类中成员变量可以是各种类型的,而接口中只能是public static final。
3.接口中不能包含代码块和静态代码块,抽象类是可以的。
4.一个类只能继承一个抽象类,却可以实现多个接口。