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());
    }
}
相关推荐
琢磨先生David2 小时前
责任链模式:构建灵活可扩展的请求处理体系(Java 实现详解)
java·设计模式·责任链模式
UpUpUp……3 小时前
C++复习
开发语言·c++·笔记
-曾牛3 小时前
使用Spring AI集成Perplexity AI实现智能对话(详细配置指南)
java·人工智能·后端·spring·llm·大模型应用·springai
Xiao Ling.3 小时前
设计模式学习笔记
java
MyikJ3 小时前
Java面试:从Spring Boot到分布式系统的技术探讨
java·大数据·spring boot·面试·分布式系统
艾莉丝努力练剑3 小时前
深入详解编译与链接:翻译环境和运行环境,翻译环境:预编译+编译+汇编+链接,运行环境
c语言·开发语言·汇编·学习
泉飒4 小时前
lua的注意事项2
笔记·lua
louisgeek4 小时前
Java 插入排序之希尔排序
java
小兵张健4 小时前
用户、资金库表和架构设计
java·后端·架构
洛小豆4 小时前
ConcurrentHashMap.size() 为什么“不靠谱”?答案比你想的复杂
java·后端·面试