当前位置: 首页 > article >正文

java高频面试之SE-05

面试官:java中为什么有多态?

面试官你好!Java 中有多态主要是为了实现灵活性和可扩展性。通过多态,可以用统一的接口处理不同的对象,从而提高代码的可维护性和可复用性。以下是多态的几个关键原因:

1. 代码灵活性

多态允许同一种方法在不同的对象上有不同的实现。这样可以在运行时决定调用哪个方法,使得代码更灵活。例如,move()方法可以在不同交通工具上表现不同(汽车开、飞机飞)。

2. 提高可扩展性

随着新类的添加,可以很容易地扩展程序功能。只需定义新的子类并覆盖父类的方法,即可无需修改已有代码,增强程序的可扩展性。

3. 简化代码

多态可以通过使用父类的引用变量来处理各种子类对象,减少了代码的复杂性。在处理集合时,使用父类类型的列表即可存储不同的子类型。

4. 接口和抽象类

多态与接口和抽象类密切相关。接口定义了方法,但并不实现,可以通过多态的方式让不同的类实现这些接口,从而提供多种行为。

例子

父类和子类:
class Animal {
    void sound() {
        System.out.println("动物发出声音");
    }
}

class Dog extends Animal {
    void sound() {
        System.out.println("狗叫");
    }
}

class Cat extends Animal {
    void sound() {
        System.out.println("猫叫");
    }
}
使用多态:
Animal myAnimal;

myAnimal = new Dog();
myAnimal.sound(); // 输出: 狗叫

myAnimal = new Cat();
myAnimal.sound(); // 输出: 猫叫

总结

多态使得 Java 程序设计更为灵活和可扩展。通过抽象和接口,不同对象可以通过同一方法表现不同的行为,让程序在保持简洁的同时获得更大的功能扩展性。这就是我对多态的理解。

面试官:java中重载和重写区别是什么?

重载(Overloading)和重写(Overriding)是 Java 中两个重要的概念,它们在方法的使用上有显著的区别。以下是它们的主要区别:

1. 定义

  • 重载:同一个类中可以定义多个同名方法,但它们的参数列表需要不同(参数数量或类型不同)。重载主要用于方法的选择,允许不同的输入给出不同的实现。

  • 重写:子类重新定义父类中的方法,方法名、参数列表和返回类型都必须相同。这用于在子类中提供特定的实现,覆盖父类的方法。

2. 发生的地方

  • 重载:发生在同一个类中,也可以在不同类中,如果这些类之间有继承关系。但一般说是在同一个类中更常见。

  • 重写:发生在继承关系中,且必须在子类中对父类方法进行重写。

3. 方法签名

  • 重载:方法名相同,但参数列表不同(参数个数、类型或顺序不同)。

  • 重写:方法名、参数列表(和抛出的异常)都必须完全相同。

4. 影响

  • 重载:编译时决定(静态多态),根据参数类型来确定调用哪个方法。

  • 重写:运行时决定(动态多态),具体调用的版本在运行时动态确定。

示例代码

重载示例
class Calculator {
    // 加法:两个整数
    public int add(int a, int b) {
        return a + b;
    }
    
    // 加法:三个整数
    public int add(int a, int b, int c) {
        return a + b + c;
    }
    
    // 加法:两个浮点数
    public double add(double a, double b) {
        return a + b;
    }
}
重写示例
class Animal {
    public void sound() {
        System.out.println("动物发出声音");
    }
}

class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("狗叫");
    }
}

class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("猫叫");
    }
}

总结

  • 重载允许在同一类中定义相同名称的方法(参数不同),可简化代码使用。
  • 重写允许子类提供父类方法的具体实现,支持多态性。

这两者各自用于不同的场景,灵活运用可以提高代码的可读性和可维护性。

IDEA ji huo
https://pan.quark.cn/s/4216736c0427
🎬大全
https://kdocs.cn/l/cqhxNU9I2lLD
12306回家科技
https://pan.quark.cn/s/45f6bf9be1b3
在这里插入图片描述


http://www.kler.cn/a/457478.html

相关文章:

  • node内置模块之---path 模块
  • 信息科技伦理与道德1:研究方法
  • 我的博客年度之旅:感恩、成长与展望
  • TT100K数据集, YOLO格式, COCO格式
  • uniapp 自定义类微信支付键盘 (微信小程序)
  • 【Rust自学】9.3. Result枚举与可恢复的错误 Pt.2:传播错误、?运算符与链式调用
  • 关于ESD(静电放电)等级的划分
  • .net8使用log4.net并自定义日志表的字段
  • Django管理界面自定义操作重启ECS服务
  • 业务智能化的关键:探索事件驱动的业务规则模型
  • 网络的类型
  • 面试场景题系列:设计键值存储系统
  • 在Bash Shell脚本中创建和使用变量
  • 如何正确使用Jmeter
  • vue2使用pdfjs-dist和jsPDF生成pdf文件
  • 多显卡服务器如何设置使用集成显卡输出信号?
  • 从零开始开发纯血鸿蒙应用之UI封装
  • HarmonyOS NEXT应用开发实战:一分钟写一个网络接口,JsonFormat插件推荐
  • java开发配置文件集合
  • E6 中的 扩展运算符(Spread) 和 剩余运算符(Rest)
  • 游戏陪玩系统:国际版JAVA游戏陪玩系统源码陪练APP源码H5源码电竞系统源码支持Android+IOS+H5
  • 最新常见的图数据库对比,选型,架构,性能对比
  • 大数据技术-Hadoop(二)HDFS的介绍与使用
  • 深度学习笔记(6)——循环神经网络RNN
  • 折腾日记:如何让吃灰笔记本发挥余热——搭建一个相册服务
  • 工程师如何平衡工作和生活?