静态 static
1.首先,重要的是静态方法没有多态:
Learning b=new Son_learing() b.m1() //结果输出的是父类的m1方法;
2.静态方法可以使用类名.方法 直接使用:
例子: Arrays.sort() Math.random()
3.类层次的加载:
静态变量 静态方法 静态代码块(名称{ 代码块内容 })优先在类的层次执行,只在类加载时执行一次。
顺序是父类到子类,方法/变量–>代码块
之后是对象的执行顺序——>父类动态代码块–>子类动态代码块–>父类构造方法–>子类构造方法
Class.forName(“类名”):
这个代码可以在什么都不做的情况下,执行类的加载。
抽象类(abstract)
抽象类不能new成新对象,起到的作用基本上就是被其他子类继承,为子类提供属性和方法
根据抽象类,又出现了抽象方法。注意:抽象方法只存在于抽象类之中,针对一些子类必须重写(覆盖)的方法,抽象方法发挥了作用。写法如下:
public abstract void eat(); //注意,抽象方法无{}
最终 final
final 修饰的 类: 无法被继承
final 修饰的 方法:无法被修改/重写/覆盖
final 修饰的 属性:在构建对象之前,就要对属性赋值完毕
(题外话:有三种赋值方式:
- 直接赋值
- 代码块赋值
- 构造方法赋值
接口
接口是一种附加的能力,他等于能力,又是一种约束
使用场景:父类功能不足以批量描述所有的子类,针对一些子类,用接口来补充子类方法。
使用方式:
创建接口: interface MyInterface { //公开的静态常量 需要每个类都要有这个常量 //公开的抽象方法 需要每个类重写这个自己的抽象方法 }
当然,借口默认public static final修饰属性 , 默认public abstract修饰方法
接口引用: 指向实现类对象,实现多态,但尽可调用接口声明的方法
为的就是实现特定的(接口里存在的)功能,也更自然的使用多态:
MyInterface a = new Dog(); 接口多态,实现接口功能
public void method(**MyInterface** a){方法代码} //注意,此时a的类型是接口类,为实现特定功能