publicstaticvoidmain(String[] args){ Student s1 = new Student();
System.out.println(Student.age);//静态变量推荐使用类名直接访问 //System.out.println(Student.score);报错:Non-static field 'score' cannot be referenced from a static context System.out.println(s1.age); System.out.println(s1.score);
s1.run();//非静态方法需要通过对象调用 s1.go(); Student.go();//静态方法直接用类名调用 go();//在本类里可以 //Student.run();报错:Non-static method 'run()' cannot be referenced from a static context } }
//抽象类,不能使用new来创建对象,是用来让子类继承的 publicabstractclassAction{ //抽象方法,只有方法声明没有方法实现,是用来让子类实现的 //抽象方法必须要在抽象类里,否则报错:Abstract method in non-abstract class publicabstractvoiddoSomething(); publicvoidhello(){}//抽象类中可以写普通方法,继承的子类也不需要一定重写 }
publicclassAextendsAction{ //提示:Class 'A' must either be declared abstract or implement abstract method 'doSomething()' in 'Action' //继承了抽象类的子类必须实现原抽象类里的所有抽象方法,除非这个继承类也是一个抽象类 @Override publicvoiddoSomething(){ } }
不能new抽象类,只能靠子类去实现,抽象类仅作为一种约束。
抽象类中可以写普通方法
抽象方法必须在抽象类中
意义:提高开放效率&可扩展性
类是单继承的,接口是多继承的——所以抽象类其实用得不多
接口
普通类:只有具体实现
抽象类:具体实现和规范(抽象方法)都有
接口:只有规范(声明定义),自己无法写方法,约束和实现分离(生产环境惯例:面向接口编程)
接口就是规范,定义的是一组规则,体现了现实世界里“如果你是……则必须能……”的思想。
接口的本质是契约,正如人类的法律一样制定好后大家都遵守。
OO的精髓是对对象的抽象——最能体现这一点的正是接口。
声明类的关键字是class,声明接口的关键字是interface。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
publicinterfaceUserService{
//接口中所有的属性默认都是public static final的,全局静态常量 //直接写属性变量类型+名字+值即可 //一般不会在接口里定义常量 int AGE = 99;