重写
show 代码
public class MethodFather {
void max(int a, int b) {
System.out.println("父类:Using Int");
System.out.println(a < b ? a : b);
}
}
public class MethodSon extends MethodFather{
@Override
void max(int a, int b) {
System.out.println("子类:Using Int");
System.out.println(a < b ? a : b);
}
}
重写:
子类实现父类已经存在的方法,如果不需要父类方法逻辑去除super();也可实现自己的逻辑
注意事项:
- 子类中的方法与父类中的方法,有相同的返回类型、相同的方法名称、相同的参数列表
- 子类中的方法的访问级别,不能低于父类中该方法的访问级别
- 子类中方法抛出的异常范围,不能大于父类中方法抛出的异常的范围
重载
show代码:
public Student() {
}
public Student(Integer id) {
this.id = id;
}
public Student(Integer id, String name) {
this.id = id;
this.name = name;
}
重载:
java允许在一个类中,多个方法拥有相同的名字,但在名字相同的同时,必须有不同的参数
重写和重载有时候其实能够明白什么区别,就是有时候分不清谁试试..
区别记忆
重载:玩游戏的存档,重载,内容是一样 的,当时存档被你加载后,有些东西就变了,如果时间
重写:想起老师让你重写大字一百遍,记得要一模一样的…
问题:父类的静态方法能不能被子类重写?
首先你的明白,静态方法子类是可以调用的
但是static修饰符修饰的东西,在编译之后所分配的内存会一直存在(不会被回收),直到程序退出内存才会释放这个空间。
而该对象的所有指向都会是父类的引用,而不是子类
父类代码:
public class Fu {
public static void show() {
System.out.println("父类的静态方法");
}
public void method() {
System.out.println("父类的普通方法");
}
}
子类代码:
public class Zi extends Fu {
public static void main(String[] args) {
Fu fu = new Zi();
fu.show();
fu.method();
}
public static void show() {
System.out.println("子类的静态方法");
}
public void method() {
System.out.println("子类的普通方法");
}
}
输出的结果是:
父类的静态方法
子类的普通方法
重写,是因为运行时多态的判断,才能区分具体去调用那个类,如果编译时,内存指针都指向父类的内存空间,后面多态判断就失效了,重写也就没有意义了