提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
无
一、OOP(面向对象编程)
从需求到代码,就是将现实世界中对象的状态和行为变成类中的属性和方法
静态/实例 变量/方法
类方法/成员变量:不被实例化的,与类本身联系的,被所有实例化对象共享的方法和成员变量(static修饰)
实例方法/成员变量:与类的某一个具体对象相联系的、被实例化的方法/成员变量
接口
一个接口可以扩展(extends)多个接口,一个类可以实现(implements)多个接口
实际上,我们经常将接口interface用于确定ADT规约,而类class用于实现ADT,用接口来定义变量,将客户端和内部实现分离开来
默认方法:接口中带有方法体的可以被继承和重写的方法(default修饰)
静态工厂方法:接口中带有方法体的但是不能被继承和重写的方法(static修饰)
枚举构造
enum Car {
lamborghini(900),tata(2),audi(50),fiat(15),honda(12);
private int price;
Car(int p) {
price = p;
}
int getPrice() {
return price;
}
}
public class Main {
public static void main(String args[]){
System.out.println("所有汽车的价格:");
for (Car c : Car.values())
System.out.println(c + " 需要 "
+ c.getPrice() + " 千美元。");
}
}
输出结果:
所有汽车的价格:
lamborghini 需要 900 千美元。
tata 需要 2 千美元。
audi 需要 50 千美元。
fiat 需要 15 千美元。
honda 需要 12 千美元
二、等价性
immutable(不可变类型)
1、AF表示等价性
如果抽象函数映射的抽象值相同,则等价
2、观察等价性
站在外部观察者角度,对两个对象调用所有操作(构造器、生产器、观察器),都会得到相同的结果,则认为这两个对象是等价的。由于不可变类型没有变值器,故其观察等价性等同于行为等价性
比较操作———— ==和equals()
1、引用等价性==
对于基本数据类型,是比较值是否相等;对于引用数据类型,比较是否指向内存中相同的地址空间。若相等,其实就是同一对象。
2、对象等价性equals()
即按我们定义的内容相等。需要重写equals()和hashCode()方法,满足自反、对称、传递三个性质
mutable(可变类型)
1、观察等价性
站在外部观察者角度,对两个对象调用所有构造器、生产器、观察器操作,都会得到相同的结果,则认为这两个对象是等价的。
此处的“相同的结果”指的是,等价的输入应该产生等价的输出
2、行为等价性
对两个对象调用所有操作(包括变值器在内),都会得到相同的结果,则认为这两个对象是等价的。
对于不可变类型而言,一般倾向于使用观察等价性,但即使是观察等价性,也有可能破坏RI,因此一般不可变类型不重写equals()和hashCode()方法,而是以其他方法取代之
总结
无