先简单说一下static
关于 static
static 修饰的方法及属性是同类一起加载的,所以可以直接使用类名进行调用。其外,类中非静态的方法也可以调用静态的方法和属性,但是静态的方法不能调用非静态的方法和属性。
private static int age;
private double score;
public void print(){
System.out.println(Student.age);
}
public void study(){
read();
}
public static void read(){
//study();会报错
}
除此之外还有静态代码块
{
System.out.println("匿名代码块"); //执行顺序2,一般可以用来赋一些初始值
}
static {
System.out.println("静态代码块"); //执行顺序1,但只执行一次
}
public Student(){
System.out.println("构造方法"); //执行顺序3
}
public static void main(String[] args) {
Student s1 = new Student();
System.out.println("============");
Student s2 = new Student();
}
输出方法:
静态代码块
匿名代码块
构造方法
============
匿名代码块
构造方法
抽象类
关键字: abstract
特点:
- 抽象类中的抽象方法可以没有方法体,只有方法名,没有方法体,没有{},以; 结尾
- 抽象方法必须要被继承这个抽象类的子类重写,子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类(类单继承的原因)
- 抽象类不能被new出来,只能靠子类去实现它
- 抽象类中可以有普通方法,但抽象方法只能在抽象类中
public abstract class Action{
public abstract void dosomething();
}
思考: 抽象类存在构造方法吗?
抽象类中,有构造方法,但是有不能new,那么构造方法干嘛的呢? 给子类用。
抽象类本质也是类,只能实现单继承,如何实现多继承,那么就有了接口的诞生
接口
- 普通类:只有具体实现
- 抽象类:具体实现和规范(抽象方法)都有
- 接口:只有规范,自己无法写方法,实现约束和实现分离
接口就是规范,定义是一组规则。体现了显示世界中,如果你是…则可以做…的思想。
接口的本质是契约,制定好后大家都要遵守。
OOP的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么会讨论设计模式都是只针对具备面对对象能力的语言,就是因为设计模式所研究的,实际上就是如何合理的去抽象。
注意:
- 接口是一种约束,一种规范
- 接口定义了一些方法,让不同的人实现
- 方法类型是 public abstrat
- 常量类型是 public static final
- 接口不能被实例化,因为接口没有构造方法
- 一个类可以同时实现多个接口
package OOP.Demo06;
public interface UserService {
//接口中的所有定义其实都是抽象的 public abstract
void add(String name);
void delete(String name);
void update(String name);
void query(String name);
}
package OOP.Demo06;
public interface TimeService {
void showtime(String time);
}
package OOP.Demo06;
//类可以实现接口 implements 接口
//实现了接口的类,就要重写接口中的方法
//一个类可以同时实现多个接口
public class UserServiceImpl implements UserService,TimeService {
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
@Override
public void showtime(String time) {
}
}