网站首页 > java教程 正文
“合抱之木,生于毫末;九层之台,起于累土。” 很多人对基础知识的巩固不够重视。Java 基础就如同大厦的基石,没有稳固的基石,再宏伟的架构也只是空中楼阁。
检验知识是否学得牢固,有一个比较好的办法,假设现在有个面试官问你这个问题,你是否脑瓜子嗡嗡的呢?
为了全面掌握基础知识,我们计划形成基础知识100问,破解大多数的JAVA面试涉及到的基础问题,不用去背八股文,掌握好基础就能灵活应对面试官的提问。
往期我们讨论过的主题有:
1. Java 基本数据类型有哪几种?它们各自所占的字节数是多少?
这里补充一下默认值
byte、short、int的默认值为0
long的默认值为0L
float的默认值为0.0f
double的默认值为0.0d
char的默认值为'\u0000'
boolean的默认值为false
2. JAVA自动装箱和拆箱是如何实现的?在什么场景下会自动发生?
3. Java中的String、StringBuilder和StringBuffer的区别,以及各自的适用场景
4. JAVA技术第4问:==和equals方法在比较对象时的区别是什么?在自定义类中如何正确重写equals方法?
5. JAVA技术第5问:Java中的final关键字有哪些作用?分别应用在类、方法和变量上时会有什么效果?
6. JAVA技术第6问:什么是抽象类和接口?它们之间有什么区别?什么情况下用?
7. JAVA技术第7问:解释Java中的多态性,它是如何实现的?有哪些体现形式?
今天咱们是第八问,探讨的内容是:"请描述Java中的方法重载和方法重写的区别,以及它们在多态中的作用。"
试想一下,如果不往下看,你是否能够完整地回答出这个问题呢? 如果答案是肯定的,那恭喜你,你可以节约些时间去学习别的知识了! 当然,“温故而知新”,如果您不忙的话,接着往下看也无妨。
在Java中,方法重载(Overloading)和方法重写(Overriding)是两种不同的概念,它们在多态性中都扮演着重要的角色,但它们的作用和实现方式是不同的。
方法重载(Overloading)
方法重载指的是在同一个类中存在多个同名方法,但是这些方法的参数列表(参数的个数、类型或者顺序)必须不同。以下是方法重载的几个特点:
- 发生在同一个类中。
- 方法名相同,参数列表不同。
- 返回类型可以相同也可以不同。
- 访问修饰符可以不同。
- 方法重载与返回类型无关。
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
}
在上面的例子中,add 方法被重载了三次,根据不同的参数列表来调用不同的方法。
方法重写(Overriding)
方法重写指的是在子类中重新定义父类中已有的方法。以下是方法重写的几个特点:
- 发生在子类与父类之间。
- 方法名和参数列表必须相同。
- 访问修饰符必须相同或者更为宽松(比如,子类中的访问修饰符不能比父类中的更严格)。
- 返回类型必须相同或者是父类返回类型的子类型(covariant return types)。
- 重写的方法不能比被重写的方法抛出更多种类的检查异常。
public class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}
public class Dog extends Animal {
@Override
public void sound() {
System.out.println("Dog barks");
}
}
在上面的例子中,Dog 类重写了 Animal 类的 sound 方法。
在多态中的作用
方法重载 在多态中不是直接相关的,因为它是在编译时解析的,编译器会根据方法签名(方法名和参数列表)来决定调用哪个方法。重载不是多态的一部分,因为它不涉及对象的类型转换。
方法重写 是多态的核心。当子类对象被向上转型为父类引用时,可以调用重写的方法,此时会调用子类中的方法实现,而不是父类中的方法实现。这允许在运行时根据对象的实际类型来调用正确的方法,这是面向对象编程中动态绑定和多态性的体现。
Animal myAnimal = new Dog();
myAnimal.sound(); // 输出 "Dog barks",因为实际对象是Dog类型,所以调用了Dog类中重写的方法
在这个例子中,myAnimal 是一个 Animal 类型的引用,但它指向了一个 Dog 类型的对象。当调用 sound 方法时,由于多态性,会调用 Dog 类中重写的方法。
猜你喜欢
- 2025-03-14 Java 性能优化的 50 个细节(珍藏版)
- 2025-03-14 【干货】什么是Java反射,以及Java中为什么需要反射?
- 2025-03-14 小心陷阱!Java中常犯的10个错误(java程序中的错误有哪几种)
- 2025-03-14 Java 类、域与字段:从基础到实践的深度解析
- 2025-03-14 三十四、Java中的final关键字(关于java语言中的final关键字的使用)
- 2025-03-14 Java 四种访问权限深入解析(java四种访问权限区别)
- 2025-03-14 Java修炼终极指南:38. 从Proxy实例调用默认方法
- 2025-03-14 编译JDK详解以及保护(protected)修饰符的理解
- 2025-03-14 JAVA面试基础题(java面试基础题及答案整理)
- 2025-03-14 Java基础分享,一篇文章说透Java访问修饰符详解
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)