接口
接口中可以包含变量,方法。接口无法被实例化,接口没有构造方法。
接口中的变量会被隐式指定为public static final
接口中的方法会被隐式指定为public abstract
idea也在提示这些灰色的public static final和public abstract都是多余的可以不写
要使用接口就要实现它,用implements关键字
public class InterfaceTestImpl implements InterfaceTest {
@Override
public void saySomething(String things) {
System.out.println(name+":"+things);
}
}
public class Main {
public static void main(String[] args) {
InterfaceTest interfaceTest = new InterfaceTestImpl();
System.out.println(InterfaceTest.name);
interfaceTest.saySomething("I implement a interface");
}
}
sora
sora:I implement a interface
抽象类
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
使用:
public abstract class People {
public String name;
public int age;
public People(String name, int age) {
this.name = name;
this.age = age;
}
public void eat(){
System.out.println("people neet to eat");
}
public abstract void sleep();
}
得有一个类去继承它,并且实现这个抽象方法
public class Student extends People{
public String grade;
public Student(String name, int age, String grade) {
super(name, age);
this.grade = grade;
}
@Override
public void sleep() {
System.out.println("a student neet to sleep enough");
}
}
public class Main {
public static void main(String[] args) {
People p = new Student("sora",21,"大三");
p.eat();
p.sleep();
}
}
people neet to eat
a student neet to sleep enough
总结:
-
抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
-
抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
-
抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
-
构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
-
抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。