|
53 | 53 | - [2.3. 修饰符](#23-修饰符)
|
54 | 54 | - [2.3.1. 在一个静态方法内调用一个非静态成员为什么是非法的?](#231-在一个静态方法内调用一个非静态成员为什么是非法的)
|
55 | 55 | - [2.3.2. 静态方法和实例方法有何不同](#232-静态方法和实例方法有何不同)
|
56 |
| - - [2.4. 接口和抽象类](#24-接口和抽象类) |
57 |
| - - [2.4.1. 接口和抽象类的区别是什么?](#241-接口和抽象类的区别是什么) |
58 | 56 | - [2.5. 其它重要知识点](#25-其它重要知识点)
|
59 | 57 | - [2.5.1. String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?](#251-string-stringbuffer-和-stringbuilder-的区别是什么-string-为什么是不可变的)
|
60 | 58 | - [2.5.2. Object 类的常见方法总结](#252-object-类的常见方法总结)
|
@@ -798,7 +796,6 @@ Java 程序设计语言对对象采用的不是引用调用,实际上,对象
|
798 | 796 | | 发生阶段 | 编译期 | 运行期 |
|
799 | 797 |
|
800 | 798 |
|
801 |
| -
|
802 | 799 | **方法的重写要遵循“两同两小一大”**(以下内容摘录自《疯狂 Java 讲义》,[issue#892](https://github.com/Snailclimb/JavaGuide/issues/892) ):
|
803 | 800 |
|
804 | 801 | - “两同”即方法名相同、形参列表相同;
|
@@ -986,27 +983,6 @@ public class Student {
|
986 | 983 |
|
987 | 984 | 2. 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。
|
988 | 985 |
|
989 |
| -### 2.4. 接口和抽象类 |
990 |
| -
|
991 |
| -#### 2.4.1. 接口和抽象类的区别是什么? |
992 |
| -
|
993 |
| -1. 接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),而抽象类可以有非抽象的方法。 |
994 |
| -2. 接口中除了 static、final 变量,不能有其他变量,而抽象类中则不一定。 |
995 |
| -3. 一个类可以实现多个接口,但只能实现一个抽象类。接口自己本身可以通过 extends 关键字扩展多个接口。 |
996 |
| -4. 接口方法默认修饰符是 public,抽象方法可以有 public、protected 和 default 这些修饰符(抽象方法就是为了被重写所以不能使用 private 关键字修饰!)。 |
997 |
| -5. 从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范。 |
998 |
| -
|
999 |
| -> 备注: |
1000 |
| -> |
1001 |
| -> 1. 在 JDK8 中,接口也可以定义静态方法,可以直接用接口名调用。实现类和实现是不可以调用的。如果同时实现两个接口,接口中定义了一样的默认方法,则必须重写,不然会报错。(详见 issue:[https://github.com/Snailclimb/JavaGuide/issues/146](https://github.com/Snailclimb/JavaGuide/issues/146)。 |
1002 |
| -> 2. jdk9 的接口被允许定义私有方法 。 |
1003 |
| -
|
1004 |
| -总结一下 jdk7~jdk9 Java 中接口概念的变化([相关阅读](https://www.geeksforgeeks.org/private-methods-java-9-interfaces/)): |
1005 |
| -
|
1006 |
| -1. 在 jdk 7 或更早版本中,接口里面只能有常量变量和抽象方法。这些接口方法必须由选择实现接口的类实现。 |
1007 |
| -2. jdk8 的时候接口可以有默认方法和静态方法功能。 |
1008 |
| -3. Jdk 9 在接口中引入了私有方法和私有静态方法。 |
1009 |
| -
|
1010 | 986 | ### 2.5. 其它重要知识点
|
1011 | 987 |
|
1012 | 988 | #### 2.5.1. String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?
|
|
0 commit comments