Q1:接口中可以定义方法并且实现方法吗?
A:
- 接口中可以定义静态方法和抽象方法。
静态方法可以实现方法体并且可以通过 接口名.方法名() 来 调用方法。
抽象方法不能实现方法。
代码 A:
interface StaticAndAbstract{
static void testStatic(){
System.out.println(“Hello”);
}
abstract void testAbstract (){
System.out,println(“world”);//报错:抽象方法不能有方法体
}
}
public static void main(Strings[] args){
StaticAndAbstract.testStatic();
}
- 接口中成员变量默认用 public static final
修饰成员方法默认用 public static 修饰。
Q2:静态方法和抽象方法的区别?
A:
- 静态方法属于字节码文件,可以直接用 类名.方法名()直接调用,不用创建类 的实例。
代码 A:
class StaticMethod{
static void test(){
System.out.println("Hello world!");
}
}
public static void main(String[] args){
StaticMethod.test();
}
输出:
Hello world
- 抽象方法并没有方法体,不能直接运行,需要具体实现。
代码 B:
abstract class AbstractMethod{
/**
abstract void test(){
System.out.println("Hello world!");//报错:抽象方法不能有方法体
}
*/
abstract void test();//定义抽象方法不需要 “ { } ”
}
class MyAbstractMethod extends AbstractMethod{
void test(){
System.out.println("Hello world!");
}
}
public static void main(String[] args){
MyAbstractMethod myAbstractMethod = new MyAbstractMethod();
myAbstractMethod.test();
}
输出:
Hello world!
- 抽象方法和静态方法之间没有关系,且一个方法不能同时用 static 和abstract 修饰。
代码 C:
static abstract void test(){}//错误
- 但是可以在抽象类里声明静态方法。虽然抽象类不能实例化,可以通过
类名.静态方法()调用改方法。
代码 D:
abstract class Test{
/**
static void test();//报错:需要方法体,而不是分号
*/
static void test(){//可以写入方法体,也可以不写入
System.out.println("Hello world!");
}
}
public static void main(Strings[] args){
Test.test();
}
输出:
Hello World!