1. 抽象类
举一道常见的java基础面试题:抽象类必须要有抽象方法吗?
答案是不需要,抽象类中可以有非抽象的方法,可以正常编译。
abstract class Cat {
public static void sayHi() {
System. out. println("hi~");
}
}
2.接口
在看完上面的关于抽象类的问题后,一般会习惯性的联想到接口,因为抽象类和接口是有一定的相似的。
以往的印象是,接口中只能写方法,不能写方法体,方法体由实现类进行实现。
但是在JDK8版本后,接口中竟然可以写方法了,而且如果在接口中写好的方法,实现类不用实现。
定义一个接口和实现类
MyInterface.java:
interface MyInterface{
String myNewName(String newName);
default String myOldName(){
return "oldzhang";
}
}
GetName.java:
public class GetName implements MyInterface{
public static void main(String args[]){
GetName getName = new GetName();
//可以直接调用接口中的默认方法myOldName()
System.out.println("my old name is "+getName.myOldName());
String newName = "zhangsan";
getName.myNewName(newName);
}
//只需要实现接口中没有方法体的方法即可;
public String myNewName(String newName){
System.out.println("my new name is "+newName);
return "my new name is "+newName;
}
}
运行结果:
my old name is oldzhang
my new name is zhangsan
总结:在JDK8+版本,接口和抽象类都可以写方法体,并可以运行。