Java基础之重写和重载谁是谁

来源:互联网 发布:linux0.11内核源码 编辑:程序博客网 时间:2024/05/02 04:37

重写

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("子类的普通方法");      }  }  

输出的结果是:

父类的静态方法

子类的普通方法

重写,是因为运行时多态的判断,才能区分具体去调用那个类,如果编译时,内存指针都指向父类的内存空间,后面多态判断就失效了,重写也就没有意义了

原创粉丝点击