抽象类
/*通过abstract定义的方法是抽象方法,它只有定义,没有实现。抽象方法定义了子类必须实现的接口规范;定义了抽象方法的class必须被定义为抽象类,从抽象类继承的子类必须实现抽象方法;如果不实现抽象方法,则该子类仍是一个抽象类;面向抽象编程使得调用者只关心抽象方法的定义,不关心子类的具体实现。*/public class Object1{ public static void main(String[] args) { Person p = new Student(); p.run(); }}// abstract修饰的类叫抽象类abstract class Person{ public abstract void run(); // 抽象方法}class Student extends Person{ @Override public void run() { System.out.println("Student.run"); }}
接口
// 抽象类与接口的对比 abstract class interface 继承 只能extends一个class 可以implements多个interface 字段 可以定义实例字段 不能定义实例字段 抽象方法 可以定义抽象方法 可以定义抽象方法 非抽象方法 可以定义非抽象方法 可以定义default方法// 接口的继承interface Hello { void hello();}interface Person extends Hello { void run(); String getName();}// default方法public class Object1{ public static void main(String[] args) { Person p = new Student("xiao wang"); p.run(); }}interface Person{ String getName(); // 可以省略前面修饰的public abstract /* * default方法的目的是,当我们需要给接口新增一个方法时,会涉及到修改全部子类。 * 如果新增的是default方法,那么子类就不必全部修改,只需要在需要覆写的地方去覆写新增方法。*/ default void run() { System.out.println(getName() + " run"); }}// 实现接口需要用到implements关键字,// 一个类可以实现多个接口class Student implements Person Hello{class Student implements Person { private String name; public Student(String name){ this.name = name; } public String getName(){ return this.name; }}
静态字段和静态方法
// 静态字段实例public class Object1{ public static void main(String[] args) { Person p = new Person("小王",21); Person m = new Person("小帅",24); //p.number = 100; //System.out.println(p.number); //m.number = 1000; //System.out.println(m.number); /* * 通过演示我们发现 实例变量.静态字段 能够去访问静态字段;实例变量并没有该字段, * 这是因为编译器会根据实例类型自动转换为 类名.静态字段 来访问静态对象 * 因此,建议直接用 类名.静态字段 来访问静态对象*/ Person.number = 100; System.out.println(Person.number); }}class Person{ public String name; public int age; public static int number; // 静态字段 public Person(String name, int age){ this.name = name; this.age = age; }}// 静态方法// 调用静态方法不需要实例,无法访问this,但可以访问静态字段和其他静态方法;public class Object1{ public static void main(String[] args) { Person.setNumber(100); System.out.println(Person.number); }}class Person{ public static int number; // 用static修饰的方法称为静态方法 public static void setNumber(int value){ number = value; }}// 接口的静态字段// 接口不能定义实例字段。但是可以有静态字段public interface Person { //public static final int MALE = 1; //public static final int FEMALE = 2; // 编译器会自动加上public statc final: int MALE = 1; int FEMALE = 2;}