java 抽象类、接口、内部类
一、抽象类
抽象类不能实例化,
抽象类中可以包含不带方法体的方法,可以有带方法体的方法。
抽象类中不带方法体的方法,子类继承后必须要重写,
抽象类可以有构造方法
public abstract class Person { //抽象方法 public abstract void say(); public void ok(){ System.out.println("普通方法"); } }
public class Student extends Person { @Override public void say() { System.out.println("student-say"); } }
二、接口
1.一般
接口的方法默认是公有的抽象方法,不能带方法体
完全版
public interface Person { public abstract void say(); }
可以简写
public interface Person { void say(); }
实现时必须要覆盖所有的抽象方法
public class Student implements Person { @Override public void say() { System.out.println("student-say"); } }
2.java7增加常量
常量是静态的
public interface Person { public static final int A = 10; }
简写
public interface Person { int A = 10; }
调用
public class Test { public static void main(String[] args) { System.out.println(Person.A); } }
3.java8接口默认方法和静态方法
接口的默认方法,子类可以不重写
public interface Person { //默认是public的可以不加 default void say() { System.out.printf("person-say"); } }
public class Student implements Person { } --------------- public class Test { public static void main(String[] args) { Student p=new Student() ; p.say(); } }
静态方法
子类可以重写,调用时不实例化
public interface Person { static void say() { System.out.printf("person-say"); } } ------------------------ public class Test { public static void main(String[] args) { Person.say(); } }
4.java9接口私有方法
接口私有方法只能在本接口中使用
public interface Person { default void say() { System.out.println("person-say"); ok(); } private void ok(){ System.out.println("aa"); } } ---------------- public class Student implements Person { } -------------------- public class Test { public static void main(String[] args) { Student p=new Student() ; p.say(); } }
三、内部类