方法的重写

方法的重写:

重写都是方法的重写,和属性无关,重写只和非静态方法有关,对关键词public可以使用。


重写:需要有继承关系,是子类重写父类的方法。

  1. 方法名必须相同

  2. 参数列表必须相同

  3. 修饰符:范围可以扩大但不能缩小: public>Protected>Default>private

  4. 抛出的异常:范围可以被缩小,但不能扩大。

重写:子类的方法和父类一定要一致,但是方法体不同。

为什么需要重写?

答: 父类的功能,子类不一定需要,或者不一定满足。


静态方法时如下:

Application:

package com.cheng.oop;

import com.cheng.oop.extend.A;
import com.cheng.oop.extend.B;

public class Application {
   public static void main(String[] args) {

       //方法的调用只和左边调用的数据类型有关
       A a = new A();
       a.print();//输出A

       //父类的引用指向了子类,因为AB存在继承关系
       B b = new A();
       b.print();//输出B
  }
}


B:

package com.cheng.oop.extend;

public class B {
   public static void print(){
       System.out.println("B-->print");//输出
  }

}

A:

package com.cheng.oop.extend;

public class A extends B {
   public static void print(){
       System.out.println("A-->print");//输出
  }

}

非静态方法如下:

Application:

package com.cheng.oop;

import com.cheng.oop.extend.A;
import com.cheng.oop.extend.B;

public class Application {
   public static void main(String[] args) {

       //方法的调用只和左边调用的数据类型有关
       A a = new A();
       a.print();//输出A

       //父类的引用指向了子类,因为AB存在继承关系
       B b = new A();//子类重写了父类的方法
       b.print();//输出A
  }
}


B:

package com.cheng.oop.extend;

public class B {
   public void print(){
       System.out.println("B-->print");
  }

}

A:

package com.cheng.oop.extend;

public class A extends B {
   @Override//重写的意思 注解 是有功能的注释
   public void print() {
       System.out.println("A-->print");
  }
}

可以看出,静态方法和非静态的方法区别很大!


依照个人理解,如B是父亲,职业医生,A是儿子,想当程序员。若static方法时,在Application中,A如果走自己的路,那么就会成为一名程序员,如果A按照B的期望来,就会成为一名医生。可是在没有static时,即子类重写父类时候,说明B的期望不符合A的要求,A进行重写,那么无论是A按照自己的方法来还是按照B期望A成为一名医生,最终A都会成为一名程序员。

 

 

 

 

 

posted @ 2021-06-03 17:49  Dudo1  阅读(219)  评论(0)    收藏  举报