一:基本介绍

简单的说:方法覆盖(重写)就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的方法

二:需要满足的条件

  1. 子类的方法的形参列表,方法名称,要和父类方法的形参列表,方法名称完全一样。
  2. 子类方法的返回类型和父类方法返回类型一样,或者是父类返回类型的子类比如交类返回类型是Object ,子类方法返向类型是String ```java class Person{ public void eat(){

    } } class man extends Person{ @Override public void eat() {

    1. System.out.println();

    } }

  1. 3. **_子类方法不能缩小父类方法的访问权限【演示】public > protected >默认>private (只能扩大权限)_**
  2. ```java
  3. class Person{
  4. void eat(){
  5. }
  6. }
  7. class man extends Person{
  8. @Override
  9. public void eat() {
  10. System.out.println();
  11. }
  12. }

三:比较

image.png

四:练习

:::danger (1)编写一个 Person 类,包括属性/private(name、age),构造器、方法 say(返回自我介绍的字符串)。
(2) 编写一个 Student 类,继承 Person 类,增加 id、score 属性/private,以及构造器,定义 say 方法(返回自我介绍的信息)。
(3)在main 中,分别创建 Person 和 Student 对象,调用 say 方法输出自我介绍 :::

  1. public class testOveride {
  2. public static void main(String[] args) {
  3. Person sakura = new Person("sakura", 18);
  4. Student sakura12 = new Student("sakura12", 19, 1001, 100);
  5. System.out.println(sakura.say());
  6. System.out.println(sakura12.say());
  7. }
  8. }
  9. class Person {
  10. private String name ;
  11. private int age;
  12. public Person(String name, int age) {
  13. this.name = name;
  14. this.age = age;
  15. }
  16. public String getName() {
  17. return name;
  18. }
  19. public void setName(String name) {
  20. this.name = name;
  21. }
  22. public int getAge() {
  23. return age;
  24. }
  25. public void setAge(int age) {
  26. this.age = age;
  27. }
  28. public String say(){
  29. return "name:"+ this.name + " age:" + this.age;
  30. }
  31. }
  32. class Student extends Person{
  33. private int id;
  34. private int score;
  35. public Student(String name, int age, int id, int score) {
  36. super(name, age);
  37. this.id = id;
  38. this.score = score;
  39. }
  40. @Override
  41. public String say() {
  42. return super.say() + "id:" + id + " score:" + score ;
  43. }
  44. }