1、jdk 1.8 之后,interface中的方法可以有方法体
class="java" name="code">
public interface InterfaceTest {
[color=red]public static void method(){
System.out.println("this is interface test ......");
}
public default void methodOne(){ //该方法可以在实现类中从写
System.out.println("this is interface test");
}[/color]
public void methodTwo();
}
interface和abstract相同点:
1、都不能被实例化
不同点:
类型abstract classinterface定义abstract class u
关键字interface关键字继承抽象类可以继承一个类和实现多个
接口接口可以继承接口,子类可以实现多个接口访问修饰符抽象方法可以有public、protected和default接口方法默认修饰符是public,其他修饰符不可以
使用方法实现可定义构造方法、抽象方法和具体方法接口类没有构造方法,jdk1.8之后方法可以有方法体实现方式子类使用extends关键字来继承抽象类,如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现作用方法复用可以降低程序模块之间的耦合
示例:
abstract类:
public abstract class AbstractedClass {
protected String getStringStr() {
System.out.println("this is a abstract class method");
return "";
}
public AbstractedClass (){
System.out.println("this is a abstract construct");
}
public abstract String testAbstract();
}
interface类:
public interface InterfaceTest {
public static void method(){
System.out.println("this is interface test ......");
}
default void methodOne(){
System.out.println("this is interface test");
}
void methodTwo();
}
实现类:
public class InterfaceExtend extends AbstractedClass implements InterfaceTest {
@Override
public void methodTwo() {
}
public static void main(String [] args){
InterfaceExtend interfaceExtend = new InterfaceExtend();
interfaceExtend.methodOne();
InterfaceTest.method();
interfaceExtend.testAbstract();
interfaceExtend.getStringStr();
AbstractedClass abstractedClass = new InterfaceExtend();//上转型
abstractedClass.getStringStr();
}
@Override
public String testAbstract() {
return null;
}
}