0、接口必须是用public abstract修饰,但是可以省略,省略也是public abstract的。
1、在定义类的时候,是可以有接口的,比如:Swimmer swimmer1 = new Shark();式中的Swimmer是一个接口,但是new后是不准有接口的,因为接口中只能有方法的描述,不能存在方法的定义(实现),在这个定义式中,用Swimmer接口的目的就是后续的操作能够更统一一些。
2、接口中的方法一定是公开且抽象(public abstract),且不能有实现,没有别的写法,只能是public abstract void methodName();为了方便,也可以省略public abstract: void methodName(),编译程序会帮我们自动加上的。但是类中的abstract 方法不一定都是public的。并且类中的某个方法没有实现的话(没有双大括号)就无法编译,必须加上abstract修饰,这还不算完,这样的类也必须用abstract修饰。但是在子类中描述父类的abstract方法的时候可以没有@override关键字。
2.5、java中接口的成员变量必须是public final static修饰的,就是不加这些修饰符,也不会报错,因为编译器会为我们自动加上。
接口的所有成员都应该公开,所以是 public
接口不能实例化,所以只有静态成员: static
接口的成员一定应该是常量,所以是 final。
3.
interface Action {
void execute();
}
class Some implements Action {
void execute() {
// TODO Auto-generated method stub
System.out.println("做一些");
}
}
public class Main {
public static void main(String[] strings){
Action action = new Some();
action.execute();
}
}
这个程序是有问题的:
execute();方法是public的,只不过是没写出来而已,Some类implements之后变成了default的,访问级别变低了,这是不对的,Some中的execute()前面没有@override是没有问题的
4、在interface中可以定义常数。如:public static final int STOP = 0; public static final int STAT = 1; public static final int UP = 2; public static final int DOWN = 3;这叫做枚举常数,事实上,在interface中也只能定义public static final的枚举常数,为了方便,也可写成
public interface Action{
int STOP = 0;
int RIGHT = 1;
......
}
编译程序自会帮我们展开。
5、接口之间也可以相互继承,关键字:extends