【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天前
|
Java 调度
Java并发基础-线程简介(状态、常用方法)
Java并发基础-线程简介(状态、常用方法)
8 0
|
1天前
|
存储 安全 Java
深入理解Java中的ThreadLocal机制:原理、方法与使用场景解析
深入理解Java中的ThreadLocal机制:原理、方法与使用场景解析
10 2
|
2天前
|
Java
JAVA高级部分学习小结(2023.11.4)
JAVA高级部分学习小结(2023.11.4)
|
2天前
|
Java
Java读取txt文件和写入txt文件-多种方法-java读写文件-java读写
Java读取txt文件和写入txt文件-多种方法-java读写文件-java读写
13 0
|
3天前
|
Java
guava Splitter 与java 内置的string的split 方法的区别
guava Splitter 与java 内置的string的split 方法的区别
5 0
|
3天前
|
设计模式 Java 测试技术
Java8实战-默认方法
Java8实战-默认方法
5 2
|
4天前
|
存储 Java 测试技术
滚雪球学Java(58):玩转Java中的ArrayList:常用操作技巧和方法总结
【6月更文挑战第12天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
5 0
滚雪球学Java(58):玩转Java中的ArrayList:常用操作技巧和方法总结
|
5天前
|
存储 缓存 Java
Java遍历Map集合的方法
在Java中,遍历Map集合主要有四种方式:1) 使用`keySet()`遍历keys并用`get()`获取values;2) 使用`entrySet()`直接遍历键值对,效率较高;3) 通过`Iterator`遍历,适合在遍历中删除元素;4) Java 8及以上版本可用`forEach`和Lambda表达式,简洁易读。`entrySet()`通常性能最佳,而遍历方式的选择应考虑代码可读性和数据量。
20 0
|
5天前
|
Java
Java中判断String类型为空和null的方法
Java中判断`String`变量是否为空或`null`需用`== null`和`.isEmpty()`。示例代码提供两种方法:`main`方法直接判断,`safeGetString`方法提供默认值。当输入为`null`或空时,返回默认值。代码包含三个测试案例,分别处理`null`、空字符串和非空非`null`字符串。
21 0
|
8天前
|
算法 Java 测试技术
滚雪球学Java(54):从零开始学习Java中的Math类,轻松解决数学难题
【6月更文挑战第8天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
15 0
滚雪球学Java(54):从零开始学习Java中的Math类,轻松解决数学难题