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());
    }
}
相关推荐
心勤则明14 分钟前
JVM(Java虚拟机)运行时数据区
java·jvm·chrome
大阳12323 分钟前
数据结构2.(双向链表,循环链表及内核链表)
c语言·开发语言·数据结构·学习·算法·链表·嵌入式
皮皮林55136 分钟前
多账号统一登录(实现方案)
java
越来越无动于衷1 小时前
智慧社区(八)——社区人脸识别出入管理系统设计与实现
java·开发语言·spring boot·python·mysql
Mr Aokey1 小时前
注解退散!纯XML打造MyBatis持久层的终极形态
xml·java·mybatis
向日葵花子(* ̄︶ ̄)1 小时前
Eclipse中导入新项目,右键项目没有Run on Server,Tomcat的add and remove找不到项目
java·eclipse
奈斯。zs2 小时前
JavaWeb02——基础标签及样式(黑马视频笔记)
前端·笔记·html
超级小忍2 小时前
Maven 常用命令详解
java·开发语言·maven
Olrookie2 小时前
若依前后端分离版学习笔记(五)——Spring Boot简介与Spring Security
笔记·后端·学习·spring·ruoyi
_Kayo_2 小时前
VUE2 学习笔记 合集
笔记·学习