接口中的属性 默认是 public static final类型 就算你不加 默认也是存在
方法默认都是public abstract类型 不加默认也存在
比如
interface K
{
String abc="sdfd";
void add() throws Exception;
}
实际上编译时 是这样
interface K
{
Public static final String abc="sdfd";
public abstract void add() throws Exception;
}
为什么属性是static
因为 接口不能实例化,非静态变量必须是实例化的对象或则有方法体的方法可以可以调用 所以不是静态就没有意义了
为什么必须是 public
因为接口本来就是一种约束 定义抽象方法 就是约束子类必须去实现 必须是public 否则访问不到
属性不定义成public 外界访问不到 同样没有意义了
为什么方法是abastract
因为带有abstract 关键字的方法,子类才必须实现 所以带有abstract关键字的方法
不能带有final abstract 是子类必须继承 final 是该方法不能被重写 所以会产生冲突
比如
interface K
{
Public String abc="sdfd";
public void add() throws Exception;
}
public class H implements K{
public String abc="";
public final void add() {
System.out.println(K.abc);
}
public static void main(String[] args) {
H h=new H();
h.add();
}
}
子类实现接口时基本的结构必须与接口一致,你不能再方法上添加如 static修饰符
不得将 public 修饰符改成private 但是你可以加上修饰符 final 表示子类的子类不能重写该方法
其实继承接口实现方法 与 继承类 重写方法 的语法是一致的
接口可以继承接口.抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数(这句话有点问题 看下面例子 V类并没有明确的构造函数 只有默认的构造函数).
class V implements IV{
public void add()
{
System.out.println("add");
}
}
interface IV
{
public void add();
}
interface IV1
{
public void add();
}
public abstract class 抽象类继承 extends V implements IV,IV1 {
public void add() {
// TODO Auto-generated method stub
super.add();
}
}
抽象类 与接口的区别
1接口内只能是功能的定义,抽象类中可以包括功能的定义和功能的实现。
2. 抽象类是用来extends的,而继承有一定的局限性,只能继承一个类
而接口就不同,可以同时实现多个接口
3 接口字段定义默认为public static final,而抽象类的则默认为friendly。