在我们使用运算符“==”来比较两个对象时,其实比较的是两个对象的地址。如
果运算符两边是同一个对象,地址相同则会等到true,只要是不同对象地址就会
不同,返回false。
我们在编程过程中经常会比较两个对象的属性,这时我们就无法用“==”来比较
了,因为即使两个对象所有属性都相同但不是同一个对象“==”号比较后也会得
到false。这种情况下我们一般会定义一个equals()方法来进行比较。
组合设计模式(CompositePattern)
? 什么时候用组合
组合是一种实现代码复用的方式,当我们在定义一个类的时候需要用到另外一个
类的方法时,就可以用组合。
? 怎么用组合
定义一个所需要的类类型的成员变量
通过构造函数进行装配,接收一个该类类型的对象,用成员变量引用
在需要使用另一个类的方法时通过成员变量访问
? 组合的优点
如果两个类没有父子关系,不合适用继承。
Java只支持单继承,组合不占用继承位置。
多态(Polymorphism)
? 什么是多态
多态字面上的意思就是多种形态。在面向对象语言中,我们可以将函数的形参定
义为一个父类类型,而在真正调用该函数时这个父类类型的所有子类对象都可以
传入,根据传入的子类对象不同函数可以运行处多种形态。
? 多态的特点
应用程序不必为每一个派生类(子类)编写功能调用,只需要对抽象基类进行处
理即可。这一招叫“以不变应万变”,可以大大提高程序的可复用性。
派生类的功能可以被基类的引用变量引用,这叫向后兼容,可以提高程序的可扩
充性和可维护性。现在写的程序可以调用将来写的程序不足为奇 。
抽象类
? 什么是抽象类
使用abstract关键字修饰的类就是抽象类,抽象类不能new对象,原因在于抽象类
含有抽象方法,不能被调用。
没有方法体的方法为抽象方法,使用abstract关键字修饰。
有抽象方法的类必须声明为抽象类,抽象类不一定含有抽象方法。
? 为什么要定义抽象类
如果有多个类具有相同的方法声明,而方法的实现不一样,这时就可以抽象出父
类,将方法在父类中声明
别人在学习我们的软件时,只需要学习父类就知道子类有什么方法
在设计软件时,要尽力抽象父类,继承关系以3~4层为宜
final关键字
final标记的类不能被继承。
final标记的方法不能被子类重写。
final标记的变量即为常量,只能赋值一次。注意引用数据类型和基本数据类型的
区别。
使用public static final共同修饰的常量就是全局常量。通常全部字母大写。