本文共 3021 字,大约阅读时间需要 10 分钟。
接口我们可以看做是抽象类的一种特殊情况,在接口中只能定义抽象的方法和常量:
1.在Java中接口用interface声明 2.接口中的方法都是public abstract的不能更改 3.接口中的变量默认都是public static final 类型的,不能更改,所以必须显示初始化 4.接口不能被实例化,接口中没有构造函数的概念 5.接口之间可以继承,但接口之间不能实现 6.接口的方法只能通过类实现,通过implements关键字继承 7.如果一个类实现了接口,那么接口中的所有方法必须实现(抽象类在实现接口时可以将方法再定义成抽象方法) 8.一个类可以实现多个接口采用接口明确的声明了它所能提供的服务
解决了就Java单继承的问题 实现了可接插性a) 接口描述了方法的特征,不给出实现,一方面解决 java 的单继承问题,实现了强大
的可接插性 b) 抽象类提供了部分实现,抽象类是不能实例化的,抽象类的存在主要是可以把公共的 代码移植到抽象类中 c) 面向接口编程,而不要面向具体编程(面向抽象编程,而不要面向具体编程) d) 优先选择接口(因为继承抽象类后,此类将无法再继承,所以会丧失此类的灵活性)1.泛化关系,类和类之间的继承关系
接口与接口之间的继承关系 2.实现关系,类对接口的实现 3.关联关系,类与类之间的连接,一个类可以知道另一个类的属性和方法,在Java语言中使用成员变量体现 4.聚合关系,是关联关系的一种,是较强的关联关系,是整体与部分的关系,如:汽车和轮胎,它与关联关系不同,关联关系的类处在同一个层次上,而聚合关系的类处在不平等的层次上,一个代表整体,一个代表部分,在Java语言中使用实例变量体现 5.合成关系,是关系的一种,比聚合关系强的关联关系,如:人和四肢,整体对象决定部分对象的生命周期,部分对象每一时刻只与一个对象发生合成关系,在Java语言中使用实例变量体现 6.依赖关系,依赖关系是比关联关系弱的关系,在Java语言中体现为返回值,参数,局部变量和静态方法调用a) Object 类是所有 Java 类的根基类
b) 如果在类的声明中未使用 extends 关键字指明其基类,则默认基类为 Object 类返回该对象的字符串表示。通常 toString 方法会返回一个“以文本方式表示”此对象的字
符串,Object 类的 toString 方法返回一个字符串,该字符串由类名加标记@和此对象哈希码 的无符号十六进制表示组成,Object 类 toString 源代码如下: getClass().getName() + ‘@’ + Integer.toHexString(hashCode()) 在编写类时,要养成覆写toString方法的好习惯。“==”:等号可以比较基本类型和引用类型,等号比较的是值,特别是比较引用类型,比较的是引用的内存地址
** * *类描述 * * @title: Test * @Author Jay * @Date: 2020/12/30 下午8:34 * @Version JDK1.8 */public class Test { public static void main(String[] args) { String s1 = "abc"; String s2 = "abc"; System.out.println((s1 == s2)?"s1 == s2": "s1 !=s2" ); //s1 == s2 System.out.println("------------------"); Person p1 = new Person(); p1.id =1; p1.name = "Jay"; Person p2 = new Person(); p2.id = 1; p2.name = "Jay"; System.out.println((p1 == p2)? "p1 == p2 " :"p1 != p2" ); //p1 != p2 }}class Person{ int id; String name;}
equals方法比较两个对象是否相等:
public class Test { public static void main(String[] args) { String s1 = "abc"; String s2 = "abc"; System.out.println((s1 == s2)?"s1 == s2": "s1 !- s2" ); //s1 == s2 String s3 = new String("abc"); String s4 = new String("abc"); System.out.println((s3 == s4)?"s3 == s4": "s3 != s4" );//s3 != s4,比较的是对象 //输出s3 == s4,所以确定string的equals比较的是具体的内容 System.out.println((s3.equals(s4))? "s3 == s4" : "s3 != s4"); System.out.println("----------------------------->"); Person p1 = new Person(); p1.id =1; p1.name = "Jay"; Person p2 = new Person(); p2.id = 1; p2.name = "Jay"; System.out.println((p1 == p2)? "p1 == p2 " :"p1 != p2" ); //p1 != p2 System.out.println((p1.equals(p2))? "p1 == p2" : "p1 != p2");//输出p1 != p2 /*因为它默认调用的是 Object 的 equals 方法 而 Object 的 equals 方法默认比较的就是地址,Object 的 equals 方法代码如下: public boolean equals(Object obj) { return (this == obj); } 如果不准备调用父类的 equals 方法,那么必须覆盖父类的 equals 方法行为*/ }}class Person{ int id; String name;}
转载地址:http://xeqwi.baihongyu.com/