【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;
    }
}
相关文章
|
3月前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
334 0
|
3月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
288 18
|
3月前
|
负载均衡 Java API
grpc-java 架构学习指南
本指南系统解析 grpc-java 架构,涵盖分层设计、核心流程与源码结构,结合实战路径与调试技巧,助你从入门到精通,掌握高性能 RPC 开发精髓。
348 7
|
3月前
|
IDE Java 编译器
java编程最基础学习
Java入门需掌握:环境搭建、基础语法、面向对象、数组集合与异常处理。通过实践编写简单程序,逐步深入学习,打牢编程基础。
241 1
|
3月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
231 4
|
3月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
326 5
|
4月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
174 11
|
4月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
4月前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
88 5
|
4月前
|
Java API 容器
Java基础学习day08-2
本节讲解Java方法引用与常用API,包括静态、实例、特定类型方法及构造器引用的格式与使用场景,并结合代码示例深入解析。同时介绍String和ArrayList的核心方法及其实际应用。
168 1