抽象类
用abstract修饰的,没有方法体的方法,必须通过子类重写来实现
1、无法直接通过new关键字创建实例(抽象类是子类中抽取出来的共同部分,无法完整描述整个事务)
2、包含抽象方法,抽象方法必须由子类具体实现,并且抽象方法权限都是public
3、有构造器
4、有普通方法
public abstract class Animal {
public Animal(){
}
abstract String eat(String str);
public static void main(String[] args) {
//new Animal();编译错误,抽象类无法具体实现对应实例的
}
}
接口
1、只有常量和抽象方法;
jdk1.8以后可以有普通方法
2、接口中无成员变量,无构造函数;
final在内存中只有一份,并且不能被修改;
3、接口可以多实现(同一个类可能会具备多个接口的功能)
4、接口可以继承接口
public interface Play {
static final String type = "功能";
abstract void tour();//等同于void tour();
public static void run() {//用模板调用,而普通方法只能用new实例对象调用
}
}
//接口的主要使用
public static void main(String[] args) {
Play[] a = {new Cat(),new Elephant()};//用接口做引用对象的类型
for(Play pl:a) {//遍历每个对象的tour();
pl.tour();
}
区别:
抽象和接口:
* 抽象类可以是包含具体成员的,而接口只能是功能的封***r> * 抽象类只能单继承,接口可以多实现
* 抽象类中是包含构造器的、、普通成员方法,成员属性,而接口中不包含构造器
instanceof
instanceof 判断实例的具体类型(一个具体的对象可以用他所有实现的任意接口类型表示,或者继承的任何一个父类表示);
final
类、方法、成员、局部变量;
1、修饰类:不可以做父类
2、修饰方法:不可以被重写
3、静态成员:常量
finally
finally 异常:无论是否有异常报出,都会执行的代码,即使之前有break、continue、return.
finalize
finalize垃圾回收机制方法。在垃圾回收所属对象之前调用,如果抛出异常,则垃圾回收器不进行回收,并且会忽略抛出的异常,在下次垃圾回收之前再次调用;
枚举
public enum Seasonenum {//1、相当于abstract类;必须放在首位
SPRING("春天"){//2、枚举子类相当于匿名内部类
int time;
public void season(){}//继承父类
},
SUMMER("夏天"){
};//枚举两个
public void season(){
}
public static void main(String[] args){
System.out.println(SeasonDemo.SUMMER);//3、获得枚举变量名
}
}