`

Effctive Java 笔记

 
阅读更多

8,重写equals,只适合值类(枚举类除外)

        自反性:x.equals(x)==true

        对称性: x.equals(y)==true 必然 y.equals(x)==true

        传递性: x.equals(y)==true, y.equals(z)==true 必然 x.equals(z)==true

        一致性:多次执行结果一直。

        问题:无法再扩展可实例化类(写子类)的同时,既增加值组件,又保留equals约定。         

        如Piont(x,y),Point3D(x,y,z)。p.equals(p3d) == true, p3d.equals(p) == false  

        解决方式:1,用组合代替继承。2,值组件加到抽象类中。

 

9,重写equals,必须重写hashCode

        equals相等必须hashCode相等。hashMap,hashSet需要。

 

10,始终覆盖toString

 

chapter-4 类和接口

13,使类和成员的访问下最小。以后再改大。

16,组合优于继承

        继承会破坏封装。例子。

package study.timeriver.wnj;

import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;

public class Test {

	//继承破坏封装。super.addAll()原本调用的是HashSet的add()。现在变成了调用MyHashSet.add()
	//addAll()调用add()是自用(self-use)。是实现细节。不是接口承诺。
	
	//例子2:子类所有的add()都会验证,如果父类又新增了一个addX(),但没有验证。使用子类对象就可以调用addX()。这就破坏了子类的封装。可以加入非法元素了。
	//例子3:父类新增一个子类的方法。会直接编译错误。
	public static void main(String[] args) {
		MyHashSet<String> s = new MyHashSet<String>();
        s.addAll(Arrays.asList("a", "b", "c"));
        //输出是6,不是3。
        System.out.println(s.getAddCount());
	}
	
	static class MyHashSet<E> extends HashSet<E> {
		private int addCount = 0;

		public boolean add(E e) {
			addCount++;
			return super.add(e);
		}
		public boolean addAll(Collection<? extends E> c) {
			addCount += c.size();
			return super.addAll(c);
		}

		public int getAddCount() {
			return addCount;
		}
	}
}

 

        使用组合就可以避免。

17,要么为继承设计,并提供文档。要么禁止继承。

        说明那些方法可以覆盖,如何覆盖。

18,接口优于抽象类

19,接口只用于定义类型                

20 用类层次替代标签类。        

分享到:
评论

相关推荐

    宋红康java笔记.rar

    【宋红康java笔记】是一份综合性的Java学习资料,由知名编程教育者宋红康编撰。这份压缩包文件包含了大量的Java编程知识点,旨在帮助初学者和有经验的开发者深入理解和掌握Java语言的核心概念与高级特性。以下是根据...

    非常好的java笔记适合初学者

    这份"非常好的java笔记"无疑是初学者踏入这个领域的宝贵资源。笔记由培训班的专业老师编写,内容详细且全面,旨在帮助初学者系统地学习和理解Java的基础知识。 首先,Java基础部分会涵盖变量、数据类型、运算符、...

    Java学习笔记学习笔记

    Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...

    java笔记java笔记

    java笔记java笔记java笔记java笔记java笔记java笔记java笔记

    java笔记 java笔记

    ### Java基础知识概述 #### 1. 前言 Java是一种广泛使用的面向对象的编程语言,因其跨平台性、安全性和强大的功能而受到欢迎。Java的设计理念是“一次编写,到处运行”,这意味着编写的Java程序可以在任何安装了...

    Java笔记桌面程序

    【Java笔记桌面程序】 在IT领域,开发个人定制的桌面应用程序是解决特定需求的有效方法。本项目名为"Java笔记桌面程序",它是由一个热衷于编程的开发者为解决其所在公司无法使用网络笔记客户端的问题而自创的。这个...

    java全套笔记 来自狂神说java笔录.zip

    【Java编程语言基础】 Java是一种广泛使用的面向对象的编程...这些笔记内容全面覆盖了Java的基础和进阶知识,适合从零开始学习Java的人群,通过系统学习,可以建立起扎实的Java编程基础,为实战项目开发打下坚实基础。

    狂神说Java笔记资料

    《狂神说Java笔记资料》是一份全面涵盖Java开发基础知识的文档集,旨在帮助学习者系统地掌握Java编程。这份笔记包含多个章节,每个章节都深入讲解了一个特定的主题,覆盖了从初学者到进阶开发者必备的知识点。 1. *...

    java笔记.zip

    尚硅谷康师傅java学习笔记。 、2020-4-5 java学习笔记 2020-4-6 java笔记 ---内部类 2020-4-6 java笔记 ---异常 2020-4-6 java笔记 --多线程 2020-4-8 java笔记 String类 2020-4-9 java 比较器 2020-4-10 java笔记 ...

    大佬的java笔记

    作为笔记的作者,被称为“专业第一”,意味着笔记内容会覆盖Java的基础语法、面向对象的深入理解和高级特性。 2. 面向对象编程:在Java中,一切皆为对象,这是Java最重要的编程范式之一。面向对象编程的基本概念...

    马士兵JAVA笔记(全).docx

    马士兵JAVA笔记(全) 本资源是马士兵的JAVA笔记,涵盖了JAVA语言的基础知识,包括标识符、常量、变量、数据类型、运算符、控制流语句等。 标识符是JAVA中的一种符号,用于命名变量、方法、类等。标识符由字母、...

    java笔记整理,java课堂笔记

    全套java笔记整理,侧边栏目录结构方便查看,纯手工整理。达内笔记整理。 已整理成带侧边栏目录的网页结构,方便复习大纲和跳转查看。大部分都带有笔记代码。 (默认设置为深珊瑚蓝色调,不喜欢可以把配置文件里的...

    尚硅谷JAVA基础笔记吐血整理

    “尚硅谷JAVA基础笔记”涵盖了Java语言的基础知识,包括语言概述、基本语法、面向对象概念、封装、继承和多态,以及一些关键概念如形参与实参、属性与局部变量、构造器、this关键字、包和MVC设计模式的使用。...

    韩顺平java笔记完整版.zip(无笔记,只是代码)

    【标题】"韩顺平java笔记完整版.zip(无笔记,只是代码)"指的是一个包含韩顺平老师Java教学视频中所有代码的压缩文件。这个压缩包不包含笔记,而是专注于提供实际的编程示例,使得学习者可以直接查看和学习Java编程...

    达内Java_笔记整理.rar_Java 达内笔记_Java笔记_java 笔记_笔记_达内

    这份名为“达内Java_笔记整理.rar”的压缩文件包含了丰富的Java学习资料,主要目标是帮助学习者节省在寻找合适学习资源上的时间,提高学习效率。达内是一家知名的教育机构,其整理的Java笔记通常会覆盖从基础到进阶...

    Java基础 学习笔记 Markdownr版

    本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...

    java学习笔记.zip

    java学习笔记java学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记...

    java超强笔记

    "Java超强笔记"正是一份专为新手准备的学习资源,它全面涵盖了从Java环境的搭建到软件设计的各种概念,旨在提供一个易读且系统的学习路径。 首先,笔记可能会从Java的起源和发展开始介绍,让你了解这门语言的历史...

    java读书笔记笔记笔记笔记笔记笔记

    【标题】"java读书笔记笔记笔记笔记笔记笔记" 暗示了这是一份关于Java编程语言的学习笔记,可能包含了作者在阅读Java相关书籍时所做的重要记录和理解。笔记通常涵盖了语言的基础概念、核心特性、类与对象、内存管理...

    李兴华java笔记

    《李兴华Java实战经典笔记》是一份深入探讨Java编程技术的宝贵资料,由知名IT教育专家李兴华编撰。这份笔记集合了他在教学和实践中积累的丰富经验,旨在帮助学习者掌握Java的核心概念、设计模式以及实战技巧。通过这...

Global site tag (gtag.js) - Google Analytics