javase复习
一、总结封装
封装就是将数据和操作数据的方法绑定起来,通过private修饰数据,这样对数据的访问只能通过定义的操作数据的方法get/set来操作数据。
封装优点:1、由于将数据进行了封装,隐藏了不必要的细节,所以提高了代码的安全性。
2、提高了代码的复用性。
3、降低了代码的耦合度。
二、继承总结
继承就是创建的新类可以沿用他所继承的类的属性和方法,新的这个类叫派生类也叫子类,被继承的叫做父类或超类。
继承优点:1、不破坏封装地沿用数据
· 2、增强了代码复用能力,减少了代码书写量
三、组合和聚合的区别
A类中包含一个对B类的引用b,当A类的对象消亡时,b所指向的对象也同时消亡,这就是组合关系。
而引用b所指向的对象还有其他的引用指向他,这种情况叫聚合。
人和手的关系是组合
人和计算机的关系是聚合
四、为什么多用复合少用继承
- 首先高内聚,低耦合,继承特性会使得耦合度增加,所以使用复合
- 继承父类属性方法的同时也会继承一些没有必要的属性方法,类会变得臃肿
- 修改方法时由于关联父类,所以会影响父类
五、抽象与接口的区别
1、接口中的方法都是抽象的,而且是公共的,而抽象类中可以一般方法,而且访问作用域可以有四种不同的修饰符。
2、接口中没有变量,都是常量,而抽象类中含有常量和变量。
3、类和接口的关系是implement,而抽象类和类的关系是extends
4、类可以实现多个接口,而一个类只能继承一个类。
5、接口可以多继承,抽象类只能有一个父类。
六、多态的总结
多态特性是指允许不同子类型的对象对同一消息做出不同的相应。
具体的应用是:
1、方法的重载:实现的是编译时的多态性,也称为前绑定
2、方法的重写:实现的是运行时的多态性,也称为后绑定
实现多态需要做的两件事:
1、方法重写(子类继承父类并重写父类中已有的或抽象的方法)
2、对象造型(用父类型引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现不同的行为)
七、面向对象开发六个基本原则
单一职责、开放封闭、里氏替换、依赖倒置、合成聚合复用、接口隔离、迪米特法则
单一职责:一个类只做它自己该做的事(高内聚)。
开放封闭:软件实体应该对扩展开放,对修改关闭。
里氏替换:任何时候都可以用子类型替换掉父类型。(多态)
依赖倒置:面向接口编程。
合成聚合复用:优先使用聚合和组合关系复用代码,少用继承。
接口隔离:接口要小而专,绝不能大而全
迪米特法则:(最少知识原则)一个对象应该对其他对象有尽可能少的了解。、
八、重写equals方法时必须重写hashcode么?
一般的地方不需要重载hashcode,只有当类需要放在HashTable、HashMap、HashSet等等hash接口的集合时才会重载hashCod。
因为在使用hash结构时,想要使两个hash对象相等,则必须二者的hashcode一样,所以必须重写hashcode。如果不重写的话,本来相同的两个对象就会有不同的hashcode,从而导致混淆。
九、StringBuffer和StringBuilder的区别
1、StringBuilder比StringBuffer的效率高,性能好
2、StringBuilder是线程不安全的,StringBuffer是线程安全的。(在多线程下,多个线程同时想要字符串缓冲池内容,则StringBuffer是安全的,大多数是单线程的,所以一般使用StringBuilder)
十、Vector和ArrayList的使用区别(向量和数组列表)
二者用法差不多,但是:
1、vector类中所有的方法都是线程同步synchronized的,多个线程共享访问同一个Vectory对象将是安全的。
2、ArrayList类中所有方法都是线程非同步的,不安全,多线程访问同一个ArrayList对象时,需要自己处理线程同步的问题。
3、单线程时候,ArrayList比vector性能高速度快。(因为不用额外开一个检查监视器)
ArrayList Iterator
Vector Enumeration
十一、LinkedList和Vectory、ArrayList的区别
后两者的区别上面有了,后二者底层都是数组实现的,而LinkList是链表实现的,其查询费劲,但是增加删除比较方便。