interface 接口
定义一个接口
接口当中全部是抽象方法
1.8新特性,允许接口出现实现方法,必须用default修饰
接口可以继承接口
接口可以多继承interface Run2 extends Run,Serializable
接口中不允许出现属性(属性不能被抽象也不能被覆盖,因此接口中不能有属性)
接口中可以出现常量
interface Animal{
private String name;//成员属性是不允许出现在接口中
public final static String name = "龙先生";
//上面没是在接口中定义一个常量,也可以简写成如下:
String name = "龙先生";
public abstract void eat();//只能存在这种方法
void eat();//可以简写,JVM会为我们自动添加前面的修饰符
public void run(){}//这种方法是不能存在的
default void run(){逻辑代码;}//这种是在JDK1.8的新特性
覆盖和不覆盖的区别
覆盖的话,调用的是子类的方法
不覆盖调用的是父类中的方法
父类中可以定义逻辑,然后具体实现让子类去干(模板方法设计模式)
class Animal{
public void eat(){
System.out.println("动物具有吃的能力");
}
}
class Dog extends Animal{
//下面的方法是覆盖了父类的方法,即重写
public void eat(){
System.out.println("狗是吃骨头的");
}
}
class Test{
public static void main(String[] args){
//下面是引用的多态,如果子类没覆盖父类的方法
//则会输出:动物具有吃的能力
//否则输出:狗是吃骨头的
Animal animal = new Dog();
animal.eat();
}
}
final关键字表示最终的,不允许修改的
用它来修饰变量,则变量不能被改变
用来修饰类,表示不能被继承
接口不能被final修饰,因为接口就是用来被实现的
final修饰的方法,不能被覆盖
final修饰的引用类型变量,只能保证地址不被覆盖,不能保证该对象的属性不被修改
final int a = 5;//此变量一经赋值,就不允许再改变
final class Animal //此类经final修饰,就不能被继承
public final void eat(){} //方法经final修饰否,不允许被覆盖和重写
final Animal a = new Animal(); //这个对象a经过final修饰后,它就不能再被 a = new Animal()了,或者把一个新对象赋值给他,但是它的成员属性可以改变
final interface Animal //final不能修饰接口
static关键字表示静态
加载和赋值的时间最早
销毁的时间最晚
只声明一次(唯一)
常量
final static 修饰的变量,就是常量