方法的重写:
同一个类中,方法名相同,参数列表中的个数或者参数的种类不同才能构成重载,与形参列表的名字无关,主要提升了用户的体验感
private static void add(int a, int b) { System.out.println(a + b); }
static void add(int a, int b, int c) { System.out.println(a + b + c); }
方法的重写: 子类继承了父类以后,想要在不改变父类代码的情况下,实现功能的修改与拓展
* 重写遵循的规则:两同 两小 一大
* 一大: 子类方法的修饰符权限 >= 父类方法的修饰符权限
* 两同: 方法名与参数列表与父类方法保持一致
* 两小: 子类方法的返回值类型 <= 父类方法的返回值类型,注意:这里的<=说的是继承关系,不是值的大小
* 子类方法抛出的异常类型 <= 父类方法抛出的异常类型
父类:
public class FatherClass { public FatherClass() { System.out.println("父类无参数构造4"); } void eat(){ System.out.println("父类方法:吃饭");; } void play(){ System.out.println("父类玩耍"); } //代码块 static { System.out.println("父类静态代码块1"); } { System.out.println("父类代码块3"); } }
子类
/** * 顺序:父类静态代码块>子类静态代码块>父类代码块>父类构造函数>子类代码块>子类无参构造 注意:静态资源只加载一次,代码库是对象创建几次就加载几次 */ public class SonClass extends FatherClass{ public SonClass() { System.out.println("子类无参构造6"); super.eat(); eat(); } { System.out.println("子类代码块5"); } static{ System.out.println("子类静态代码块2"); } //方法的重载 @Override void eat() { System.out.println("子类吃面条"); } public static void main(String[] args) { new SonClass(); } //顺序:父类静态代码块>子类静态代码块>父类代码块>父类构造函数>子类代码块>子类无参构造 }
静态资源属于类资源,优先于对象加载,也就是说:类需要实例化创建对象,而静态资源属于类资源,调用类的时候就加载了,静态代码块属于类资源,只在类加载的时候加载一次。