【JAVA学习之路 | 基础篇】方法的重写(Override)

简介: 【JAVA学习之路 | 基础篇】方法的重写(Override)

1.需求

  • 子类在继承父类后,就获取了父类的所有属性和方法,但有时候父类的方法可能并不适用于子类,换而言之,子类需要对父类的方法进行覆盖,覆写的操作.

2.规则

  1. 方法声明的格式 : 权限修饰符 返回值类型 方法名(参数列表).
  2. 父类被重写的方法的方法名和形参列表必须相同.(方法名和形参列表是方法的签名,而权限修饰符和返回值类型并不是)
  3. 子类重写的方法的权限修饰符不小于父类被重写方法的权限修饰符.(如果父类被重写方法的权限修饰符是public,那么子类重写方法的权限修饰符必须是public).(子类不能重写父类中声明为private的私有方法,因为继承性不能破坏其封装性).
  4. 如果父类被重写方法的返回值类型是void,那么子类重写父类的方法的返回值类型必须是void.
  5. 如果父类被重写方法的返回值类型是基本数据类型(如int,double),那么子类重写父类方法的方法名必须是相同的基本数据类型.
  6. 如果父类被重写方法的返回值类型是引用数据类型(如类),那么子类重写父类方法的返回值类型可以与父类该方法的返回值类型相同,也可以是其返回值类型的子类.
  7. 只有普通的方法调用可以是多态的。成员变量和静态方法不具有多态性,即不能重写

3.(注意)

  • 父类的方法才会被重写,而父类的属性并不会,即并不会被子类的同名属性覆盖.
public class GeometricObjectText {
    public static void main(String[] args) {
        GeometricObjectText g = new GeometricObjectText();
        Circle c = new Circle(1, "黑色", 1);
        MyRectangle m = new MyRectangle("绿色", 1, 2, 1);
        System.out.println(g.equalsArea(c, m));
        g.displayGeometricObject(c);
        g.displayGeometricObject(m);
    }
输出结果 :
false
面积是3.141592653589793
黑色
面积是2.0
绿色
 
 
    public boolean equalsArea(GeometricObject c, GeometricObject m) {
        if (c.findArea() == m.findArea()) {
            return true;
        } else {
            return false;
        }
    }
    public void displayGeometricObject(GeometricObject g) {
        System.out.println("面积是" + g.findArea());
        System.out.println(g.getColor());
    }
}
 
public class GeometricObject {
    private String color;
    private double weight;
    public GeometricObject() {
 
    }
    public GeometricObject(String color, double weight) {
        this.color = color;
        this.weight = weight;
    }
 
    public String getColor() {
        return color;
    }
 
    public void setColor(String color) {
        this.color = color;
    }
 
    public double getWeight() {
        return weight;
    }
 
    public void setWeight(double weight) {
        this.weight = weight;
    }
    public double findArea() {
        return 1.0;
    }
}
 
public class Circle extends GeometricObject {
    private double radius;
    public Circle(double radius, String color, double weight) {
        super(color, weight);
        this.radius = radius;
    }
 
    public double getRadius() {
        return radius;
    }
 
    public void setRadius(double radius) {
        this.radius = radius;
    }
    //方法的重写
    public double findArea() {
        return (Math.PI) * radius * radius;
    }
}
 
public class MyRectangle extends GeometricObject {
    private double width;
    private double height;
 
    public MyRectangle(String color, double weight, double width, double height) {
        super(color, weight);
        this.width = width;
        this.height = height;
    }
 
    public double getWidth() {
        return width;
    }
 
    public void setWidth(double width) {
        this.width = width;
    }
 
    public double getHeight() {
        return height;
    }
 
    public void setHeight(double height) {
        this.height = height;
    }
    //方法的重写
    public double findArea() {
        return (width) * height;
    }
}
相关文章
|
12天前
|
算法 Java
Java基础学习day03-作业
本内容包含多个Java编程案例,涵盖条件判断、循环、数组、随机数生成、素数判断等基础算法练习,适用于巩固Java语法与逻辑思维训练。
82 6
|
9天前
|
Java
Java基础学习day05-作业
本文为Java基础学习第五天作业,通过五个案例练习类与对象的定义、构造方法、set/get方法及成员方法的应用。涵盖女友、学生、教师、手机和电影等类的设计与测试,强化面向对象编程基础。
43 2
|
9天前
|
安全 Java 编译器
Java基础学习day06
本节学习Java继承与多态核心概念:继承通过extends实现,子类可复用父类非私有成员,支持单继承与多层继承,遵循就近原则并可用super调用父类成员;方法重写需满足权限与返回值约束,常用于重写toString等。多态基于继承,实现父类引用指向子类对象,提升扩展性但无法直接访问子类独有方法,可通过instanceof安全类型转换。
67 2
|
12天前
|
存储 Java 索引
Java基础学习day04
本节讲解Java数组基础,包括静态与动态初始化、元素访问及遍历方法,并介绍二维数组的定义与使用,帮助理解程序数据存储方式。
47 5
|
12天前
|
Java
Java基础学习day02-作业
本内容包含13个Java编程练习需求,涵盖变量定义、数据类型转换、运算符使用、键盘输入及条件判断等基础语法实践,适合初学者巩固Java核心基础知识。
42 5
|
10天前
|
存储 Java
Java基础学习day05
本节介绍Java面向对象编程基础,涵盖类与对象的概念、构造器、this关键字、封装、Javabean及static修饰符的使用。重点讲解如何通过类设计对象、实现数据封装与方法暴露,并理解静态成员的特点与应用场景。
47 2
|
10天前
|
Java
Java基础学习day04-作业
本作业包含8个Java编程案例,涵盖数组的定义与遍历、求和、最值计算、去极值求平均、元素倍增、二维数组行和计算及查找指定元素等内容,旨在巩固Java基础语法与数组操作技能。
121 1
|
12天前
|
存储 Java
Java基础学习day02
本教程涵盖Java基础语法,包括进制转换、数据类型、关键字与标识符、方法定义与调用、类型转换、输入输出、运算符等内容,适合初学者系统学习Java编程语言的核心概念与实践技巧。
40 1
|
Java
Java基础学习day01-作业
通过多个Java编程案例,学习变量定义、数据类型使用及控制台输出。涵盖字符串、数值、布尔值等字面量输出,变量赋值与修改,以及实际应用场景如学生信息和商品价格变化的模拟,夯实基础语法掌握。
45 0
|
12天前
|
Java
Java基础学习day03
本节讲解Java流程控制,涵盖分支结构(if、switch)与循环结构(for、while、do-while),介绍其语法、执行流程及应用场景,并解析break、continue用法与循环嵌套,助力掌握程序逻辑控制核心。
88 0