1. 接口和抽象类的区别是什么?
- 从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范。
- 一个类可以实现多个接口,但只能实现一个抽象类。(类只能单继承)。
- 除了default默认方法,接口方法中不能有代码的实现 ,抽象类可以有非抽象的方法。(Java 8 开始接口方法可以有默认实现)。
- 接口方法默认修饰符是
public,抽象方法可以有public、protected和default这些修饰符(抽象方法就是为了被重写所以不能使用private关键字修饰!)。 - 接口没有构造方法,抽象类可以有。
关于java 8 接口方法的实现,可参考https://blog.youkuaiyun.com/hspingcc/article/details/73332657?spm=1001.2014.3001.5502
2. 静态方法和实例方法有何不同?
-
静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。
-
在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
3. == 与 equals()方法的作用和区别?
== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型比较的是值,引用数据类型比较的是内存地址)。
equals() : 它的作用是判断两个对象内容是否相等(未必是同一个对象)。但它一般有两种使用情况:
- 情况 1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
- 情况 2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来比较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。
举个例子:
public class test1 {
public static void main(String[] args) {
String a = new String("ab"); // a 为一个引用
String b = new String("ab"); // b为另一个引用,对象的内容一样
String aa = "ab"; // 放在常量池中
String bb = "ab"; // 从常量池中查找
if (aa == bb) // true
System.out.println("aa==bb");
if (a == b) // false,非同一对象
System.out.println("a==b");
if (a.equals(b)) // true
System.out.println("aEQb");
if (42 == 42.0) { // true
System.out.println("true");
}
}
}
说明:
- String 中的 equals 方法是被重写过的,因为 object 的 equals 方法是比较的对象的内存地址,而 String 的 equals 方法比较的是对象的值。
- 当创建 String 类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个 String 对象。
4. 方法重载跟方法重写的区别?
-
重载(overload)就是同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理。发生在编译时期,方法名必须相同,参数类型、个数、顺序,方法返回值和访问修饰符可以不同。
-
重写(override)就是当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法。
方法的重写要遵循“两同两小一大”:
- “两同”:即方法名相同、形参列表相同;
- “两小”:指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;
- “一大”:指的是子类方法的访问权限应比父类方法的访问权限更大或相等。
| 区别点 | 重载方法 | 重写方法 |
|---|---|---|
| 发生范围 | 同一个类 | 子类 |
| 参数列表 | 必须修改 | 一定不能修改 |
| 返回类型 | 可修改 | 子类方法返回值类型应比父类方法返回值类型更小或相等 |
| 异常 | 可修改 | 子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等 |
| 访问修饰符 | 可修改 | 一定不能做更严格的限制(可以降低限制) |
| 发生阶段 | 编译期 | 运行期 |
本文深入解析了Java中的关键概念,包括接口与抽象类的区别、静态方法与实例方法的不同之处、==与equals()方法的作用及区别,以及方法重载与重写的概念与应用。
4226

被折叠的 条评论
为什么被折叠?



