java方法重写学习笔记

方法重写介绍

  • 子类和父类有两个返回值,参数,名称都一样的方法, 子类的方法会覆盖父类的方法。
  1. 调用
java 复制代码
public class Overide01 {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.cry();
    }
}
  1. Animal类
java 复制代码
public class Animal {
    public void cry() {
        System.out.println("动物叫");
    }
}
  1. Dog类
java 复制代码
public class Dog extends Animal{
//    public void cry() {
//        System.out.println("狗叫");
//    }
}

我们把Dog类的cry方法注释掉了,就会到父类里面去找。

方法重载三个细节

  1. 子类方法,形参列表,方法名和父类完全一致

  2. 子类的返回类型如果和父类不同,要保证子类返回的类型父类返回类型子类

  3. 子类的方法不能缩小父类方法的访问权限范围

  4. 调用

java 复制代码
public class Overide01 {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.cry();
    }
}
  1. Animal类
java 复制代码
public class Animal {
    public void cry() {
        System.out.println("动物叫");
    }

    public Object getSth() {
        return null;
    }

    protected First getA() {
        return null;
    }
}
  1. Dog类
java 复制代码
public class Dog extends Animal{
    public void cry() {
        System.out.println("狗叫");
    }
    //String正好是Object的子类,反过来就会报错
    public String getSth() {
        return null;
    }

    public Second getA() {
        return null;
    }
}

class First {

}


class Second extends First {

}

重写的练习

  • 刚开始的误区
  1. 每个Say方法写成void的返回类型,每个类型打印自己的属性,没有体现出来继承的优势,
  • 改进
  1. 父类的Say方法的返回类型写为String类型,返回父类自身的属性
  2. 子类的Say方法的可以用super关键字直接调用父类的方法,在此基础上,再加上自身的属性。

代码如下:

Person类:

java 复制代码
public class Person {
    Person(String name, int age) {
        this.m_Name = name;
        this.m_Age = age;
    }
    String say () {
        return "name = " + m_Name +  "age = " + m_Age;
    }
    public String getName() {
        return m_Name;
    }
    public int getAge() {
        return m_Age;
    }
    private String m_Name;
    private int m_Age;
}

Student类

java 复制代码
public class Student extends Person {
    String Say () {
        return super.say()  +  "id = " + m_Id + "score = " + m_Id;
    }
    Student(String name, int age, String id, double score) {
        super(name, age);
        this.m_Id = id;
        this.m_Score = score;
    }
    private String m_Id;
    private double m_Score;
}

调用

java 复制代码
public class OverrideExercise {
    public static void main(String[] args) {
        Person lfm = new Person("lfm", 19);
        System.out.println(lfm.say());

        Student lfm314 = new Student("lfm", 19, "314", 88.5);
        System.out.println(lfm314.Say());
    }
}
相关推荐
SunnyDays10116 分钟前
Java实战指南:如何高效将PDF转换为高质量TIFF图片
java·pdf转tiff
自信150413057598 分钟前
重生之从0开始学习c++之类与对象(中)
c++·学习
Seven979 分钟前
【从0到1构建一个ClaudeAgent】规划与协调-TodoWrite
java
AI_零食10 分钟前
开源鸿蒙跨平台Flutter开发:快递单号批量查询应用
学习·flutter·华为·开源·harmonyos·鸿蒙
Yeh20205811 分钟前
maven
java·maven
色空大师11 分钟前
【java打包方式详解】
java·开发语言·部署·打包·启动脚本·jar包分离
人道领域12 分钟前
2026年Java后端热点全景解析:从LTS革新到云原生跃迁
java·开发语言
四谎真好看13 分钟前
Redis学习笔记(高级篇2)
redis·笔记·学习·学习笔记
鱼鳞_14 分钟前
Java学习笔记_Day26(不可变集合)
java·笔记·学习
CS_Zero16 分钟前
Faster-LIO论文与代码笔记(1)
笔记·slam·lio