上一篇地址:整理好了!2024年最常见 100 道 Java基础面试题(十四)-CSDN博客
二十九、私有方法能被重载或者重写吗?
在Java中,私有方法不能被继承,因此它们不能被重写。但是,私有方法可以在同一类中被重载。
私有方法的重载
-
定义: 重载意味着可以有多个方法具有相同的名称,但是它们的参数列表必须不同(例如,参数的数量、类型或顺序不同)。
-
私有方法的重载: 在同一类中,可以有多个具有相同名称但参数列表不同的私有方法。这是因为重载是基于方法签名的,而私有方法对类的外部是不可见的,所以它们不会影响类的公共接口。
-
示例:
public class MyClass { private void myMethod() { // 方法体 } private void myMethod(int param) { // 另一个方法体 } private void myMethod(String param) { // 另一个方法体 } }
在这个示例中,
MyClass
包含三个重载的私有方法myMethod
,它们具有不同的参数类型或数量。
私有方法的重写
-
定义: 重写(Override)是子类中的方法覆盖父类中的方法的行为,要求子类方法与父类方法有相同的方法签名和相同的返回类型。
-
私有方法的重写: 由于私有方法在定义它的类的外部是不可见的,它们不能被继承,因此也不能被子类重写。重写是基于多态的,要求子类能够访问父类中的方法以便进行覆盖,但私有方法的访问限制使得这不可能。
-
示例:
public class ParentClass { private void privateMethod() { // 方法体 } } public class ChildClass extends ParentClass { // 下面的方法是合法的,但不是重写,因为父类中的privateMethod()在子类中不可访问 public void privateMethod() { // 方法体 } }
在这个示例中,
ChildClass
定义了一个与ParentClass
中相同名称的方法privateMethod
,但由于ParentClass
中的privateMethod
是私有的,ChildClass
中的方法并不是一个重写,而是一个新方法。
总结
- 私有方法可以在同一类中被重载,因为重载是基于方法签名的,且私有方法不对外公开。
- 私有方法不能被重写,因为它们不可被子类继承,重写要求子类能够继承并覆盖父类中的公共或受保护的方法。
理解重载和重写的区别对于正确使用面向对象编程特性和设计良好的类层次结构非常重要。
三十、Java 中的断言(assert)是什么?
Java中的断言(assert
)是一种调试辅助工具,它允许程序员为代码设置一些检查点,以确保程序的某个部分按照预期运行。断言主要用于检测那些在开发和测试阶段可能发生,但在生产环境中不太可能出现的程序错误。
断言的语法
断言的语法如下:
assert expression1 : expression2;
expression1
是一个布尔表达式,如果它的值为true
,则断言通过,程序继续正常执行。expression2
是一个可选的错误提示信息,如果expression1
的值为false
,则断言失败,程序会抛出AssertionError
异常,并且expression2
将作为异常信息。
使用断言
断言可以在任何地方使用,但它们通常用在以下情况:
- 测试代码:在单元测试中检查代码的某个部分是否按预期工作。
- 假设条件:在方法的开头检查一些假设条件,确保调用者遵守了方法的约定。
- 不变性检查:验证对象的某些状态条件,确保对象在方法调用前后保持在有效的状态。
启用和禁用断言
默认情况下,Java程序在运行时不会检查断言,即使代码中包含了断言。要启用断言,需要在运行Java程序时通过JVM的-ea
(enable assertions)标志来开启。相反,-da
(disable assertions)标志可以禁用断言。
java -ea MyProgram
示例
public class AssertExample {
public static void main(String[] args) {
int x = 10;
int y = 20;
assert x + y == 30 : "Check x + y failed";
System.out.println("Assertion passed, program continues.");
}
}
在这个示例中,如果 x + y
不等于30,那么断言将失败,并抛出 AssertionError
异常,同时打印出 "Check x + y failed"。
注意事项
- 断言不应该用于处理正常运行时的错误情况,如文件不存在或网络连接失败,这些应该通过常规的错误处理代码来处理。
- 断言不是用来替代错误处理的,而是用于内部错误检测,通常只在开发和测试阶段使用。
- 在生产环境中,断言可能会被禁用,因此不应该依赖断言来保证程序的正确性。
总结
断言是Java提供的一种简单但强大的调试工具,它允许开发者在代码中设置检查点,以验证程序的状态是否符合预期。通过启用或禁用断言,可以在不同的开发和测试阶段灵活地进行错误检测。然而,断言不应该用于处理预期会正常发生的运行时错误。