抽象类

用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、获得枚举变量名
    }
}