欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java接口

程序员文章站 2022-04-08 18:45:39
一,java接口 二,接口与类的区别 三,接口特性 不能使用new运算符实例化一个接口 //错误的 x = new Comparable(.....); //Comparable是一个接口 接口内能声明变量 可以使用instanceof检查一个对象是否属于某个特定类 接口可扩展 接口不能包含实例域或 ......

接口

接口我们可以看做是抽象类的一种特殊情况,在接口中只能定义抽象的方法和常量:
1.在Java中接口用interface声明
2.接口中的方法都是public abstract的不能更改
3.接口中的变量默认都是public static final 类型的,不能更改,所以必须显示初始化
4.接口不能被实例化,接口中没有构造函数的概念
5.接口之间可以继承,但接口之间不能实现
6.接口的方法只能通过类实现,通过implements关键字继承
7.如果一个类实现了接口,那么接口中的所有方法必须实现(抽象类在实现接口时可以将方法再定义成抽象方法)
8.一个类可以实现多个接口

使用接口的好处

采用接口明确的声明了它所能提供的服务
解决了就Java单继承的问题
实现了可接插性

接口和抽象类的区别?

a) 接口描述了方法的特征,不给出实现,一方面解决 java 的单继承问题,实现了强大
的可接插性
b) 抽象类提供了部分实现,抽象类是不能实例化的,抽象类的存在主要是可以把公共的
代码移植到抽象类中
c) 面向接口编程,而不要面向具体编程(面向抽象编程,而不要面向具体编程)
d) 优先选择接口(因为继承抽象类后,此类将无法再继承,所以会丧失此类的灵活性)

类之间的关系

1.泛化关系,类和类之间的继承关系
Java接口
接口与接口之间的继承关系
Java接口
2.实现关系,类对接口的实现
Java接口
3.关联关系,类与类之间的连接,一个类可以知道另一个类的属性和方法,在Java语言中使用成员变量体现
Java接口
4.聚合关系,是关联关系的一种,是较强的关联关系,是整体与部分的关系,如:汽车和轮胎,它与关联关系不同,关联关系的类处在同一个层次上,而聚合关系的类处在不平等的层次上,一个代表整体,一个代表部分,在Java语言中使用实例变量体现
Java接口
5.合成关系,是关系的一种,比聚合关系强的关联关系,如:人和四肢,整体对象决定部分对象的生命周期,部分对象每一时刻只与一个对象发生合成关系,在Java语言中使用实例变量体现
Java接口
6.依赖关系,依赖关系是比关联关系弱的关系,在Java语言中体现为返回值,参数,局部变量和静态方法调用
Java接口

Object类

a) Object 类是所有 Java 类的根基类
b) 如果在类的声明中未使用 extends 关键字指明其基类,则默认基类为 Object 类

返回该对象的字符串表示。通常 toString 方法会返回一个“以文本方式表示”此对象的字
符串,Object 类的 toString 方法返回一个字符串,该字符串由类名加标记@和此对象哈希码
的无符号十六进制表示组成,Object 类 toString 源代码如下:
getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
在编写类时,要养成覆写toString方法的好习惯。

==与equals方法

“==”:等号可以比较基本类型和引用类型,等号比较的是值,特别是比较引用类型,比较的是引用的内存地址

**
 * *类描述
 *
 * @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;
}

Java接口

本文地址:https://blog.csdn.net/qq_43652195/article/details/111996092