我记得面试的时候有个人问我接口是不是可以new来实例化。我没答上来,但是他告诉我说,我们创建对象都是要通过构造函数来进行new出来这个对象。
但是我想了下,我虽然没有构造函数,但是我可以直接new这个接口,然后实现里面全部的方法不是也可以创建这个对象吗。其实我个人认为,只是回答的角度不同罢了。怎么说应该都说的通。
接下来,我们看看接口的这些事
一、接口的方法声明必须是 public abstract, 即便不写默认也是
public interface TestA {
/**
* 接口的方法声明必须是 public abstract, 即便不写默认也是
*/
public abstract void test1();
void test2();
}
二、接口中不能包括具体的方法实现
public interface TestA {
/**
* 接口里面不能包含方法具体实现
* 提示:Delete method body
*/
// void test3(){}
}
三、可以声明 public static final 修饰的变量
public interface TestA {
public static final String a = "我是变量";
int b = 1;
}
四、接口中可以有静态方法
public interface TestA {
static void staticMethod(){
System.out.println("我是静态方法");
}
}
五、jdk1.8中增加了这个是默认方法
public interface TestA {
/**
* 这个是默认方法
*
*/
default String get(String aa){
System.out.println("我是参数aa = " + aa);
return a;
}
}
测试
/**
* 方法调用
*/
class TestD{
public static void main(String[] args) {
/**
* 接口不能实例化,但是.....但是可以被实现类创建
*/
TestA testA = new TestB();
/**
* jdk 1.8后增加的 默认方法
*/
String hello_world = testA.get("Hello World");
System.out.println("hello_world = " + hello_world);
System.out.println("-----------华丽分割线----------");
/**
* 我就想问问这么咋就创建不出来对象了呢,虽然平时不这么干,但是能实现创建对象啊。咱们单说创建对象这个事哈。
*/
TestA tA = new TestA() {
@Override
public void test1() {
}
@Override
public void test2() {
}
};
}
}