From ef7b05befc5f77eddd798cdba73cfebdafa05e44 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sun, 15 Apr 2018 11:06:44 +0800 Subject: [PATCH] auto commit --- notes/Java 基础.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/notes/Java 基础.md b/notes/Java 基础.md index aa33ce32..06100520 100644 --- a/notes/Java 基础.md +++ b/notes/Java 基础.md @@ -324,7 +324,7 @@ public class CloneExample { ```java CloneExample e1 = new CloneExample(); -CloneExample e2 = e1.clone(); // 'clone()' has protected access in 'java.lang.Object' +// CloneExample e2 = e1.clone(); // 'clone()' has protected access in 'java.lang.Object' ``` 接下来覆盖 Object 的 clone() 得到以下实现: @@ -510,7 +510,7 @@ protected 用于修饰成员,表示在继承体系中成员对于子类可见 如果子类的方法覆盖了父类的方法,那么子类中该方法的访问级别不允许低于父类的访问级别。这是为了确保可以使用父类实例的地方都可以使用子类实例,也就是确保满足里式替换原则。 -字段决不能是公有的,因为这么做的话就失去了对这个实例域修改行为的控制,客户端可以对其随意修改。可以使用共有的 getter 和 setter 方法来替换共有字段。 +字段决不能是公有的,因为这么做的话就失去了对这个字段修改行为的控制,客户端可以对其随意修改。可以使用共有的 getter 和 setter 方法来替换共有字段。 ```java public class AccessExample { @@ -634,9 +634,9 @@ System.out.println(InterfaceExample.x); **3. 比较** -- 从设计层面上看,抽象类提供了一种 IS-A 关系,那么就必须满足里式替换原则,即子类对象必须能够替换掉所有父类对象。而接口更像是一种 LIKE-A 关系,它只是提供一种方法实现契约,并不要求子类和父类具有 IS-A 关系; +- 从设计层面上看,抽象类提供了一种 IS-A 关系,那么就必须满足里式替换原则,即子类对象必须能够替换掉所有父类对象。而接口更像是一种 LIKE-A 关系,它只是提供一种方法实现契约,并不要求接口和实现接口的类具有 IS-A 关系。 - 从使用上来看,一个类可以实现多个接口,但是不能继承多个抽象类。 -- 接口的字段只能是 static 和 final 类型的,而抽象类的域可以有多种访问权限。 +- 接口的字段只能是 static 和 final 类型的,而抽象类的字段可以有多种访问权限。 - 接口的方法只能是 public 的,而抽象类的方法可以由多种访问权限。 **4. 使用选择** @@ -652,7 +652,7 @@ System.out.println(InterfaceExample.x); - 需要让不相关的类都实现一个方法,例如不相关的类都可以实现 Compareable 接口中的 compareTo() 方法; - 需要使用多重继承。 -在很多情况下,接口优先于抽象类,因为接口没有抽象类严格的类层次接口要求,可以灵活地为一个类添加行为。并且从 Java 8 开始,接口也可以有默认的方法实现,使得修改接口的成本也变的很低。 +在很多情况下,接口优先于抽象类,因为接口没有抽象类严格的类层次结构要求,可以灵活地为一个类添加行为。并且从 Java 8 开始,接口也可以有默认的方法实现,使得修改接口的成本也变的很低。 > [深入理解 abstract class 和 interface](https://www.ibm.com/developerworks/cn/java/l-javainterface-abstract/)
[When to Use Abstract Class and Interface](https://dzone.com/articles/when-to-use-abstract-class-and-intreface) @@ -773,7 +773,7 @@ String s5 = "bbb"; System.out.println(s4 == s5); // true ``` -Java 虚拟机将堆划分成新生代、老年代和永久代(PermGen Space)。在 Java 7 之前,字符串常量池被放在永久代中,而在 Java 7,它被放在堆的其它位置。这是因为永久代的空间有限,如果大量使用字符串的场景下会导致 OutOfMemoryError 错误。 +Java 虚拟机将堆划分成新生代、老年代和永久代(PermGen Space)。在 Java 7 之前,字符串常量池被放在永久代中,而在 Java 7,它被放在堆的其它位置。这是因为永久代的空间有限,在大量使用字符串的场景下会导致 OutOfMemoryError 错误。 > [What is String interning?](https://stackoverflow.com/questions/10578984/what-is-string-interning)
[深入解析 String#intern](https://tech.meituan.com/in_depth_understanding_string_intern.html)