接口
接口是一种引用数据类型。使用interface声明接口,形式
public interface 接口名称{
}
接口的特性
1.接口中可以声明属性。接口中定义的所有变量都是static final类型的。在接口中声明属性很少见
2.接口中的方法都是公共抽象方法
3.接口不能拥有构造方法,也不能用于创建对象
4.接口可以多继承。 一个接口可以继承多个其他接口
5.一个类可以实现一个或者多个接口,该类称为接口的实现类(implement
class),实现类必须实现接口中的所有抽象方法
一个类只能继承一个父类,同时实现多个接口。继承在前,实现在后
特殊情况:抽象父类定义了和接口同名的抽象方法,实现类实现的是抽象父类的抽象方法
接口中定义的一些系列方法表示的是一种种的能力。接口让实现类实现这些能力,实现类的能力得到拓展和升级。
接口实现多态
接口实现多态: 接口类型引用实现类对象
继承实现多态: 父类类型引用子类对象
接口定义的方法被实现类实现,通过接口引用实现类时,调用接口中的方法时,执行的是实现类实现的方法。
面向接口编程
所谓面向接口编程,在程序设计时,只关心实现类具备什么能力,而不关心实现类如何实现这个能力。面向接口编程时,面向接口的约定而不考虑接口的具体实现。
抽象类和接口的异同比较
抽象类和接口都是引用数据类型,他们都不能创建对象。
他们都可以定义抽象方法,都可以实现多态。但是抽象类可以定义非抽象方法,而接口中定义的都是抽象方法。
抽象类和接口都具有传递性。抽象类是单根性(单继承),而接口是多继承。
在概念上,都可以重写抽象方法。子类重写抽象类,实现类实现接口
抽象类和子类解决的是模块内的问题(代码重用,重写,多态)而接口解决的是模块间的问题 => 高内聚,低耦合。接口可以用解耦模块。
Object
Object 类是所有类的根类。如果一个类没有显示继承另外一个类,那么该类一定继承于Object。
obj.toString() 返回对象的字符串表示形式
obj.equals(Object obj) 用于判断两个对象是否相等。
== 比较两个对象的内存地址或基本数据类型的比较,object默认equals实现是比较内存地址。
equals:用于比较两个对象的内容(属性)是否相等。
当自定义对象时,要比较自定义对象是否相等,就必须通过equals方法比较两个对象属性值是否相等,那就必须重写Object的equals方法。
public boolean equals(Object obj) {
if(this == obj) {
return true; //条件成立 地址相同
}
Students =(Student) obj;
if(this.sid.equals(s.sid) && this.name.equals(s.name) && this.age == s.age) {
return true;
}else {
return false;
}
}