博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java接口
阅读量:3947 次
发布时间:2019-05-24

本文共 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语言中体现为返回值,参数,局部变量和静态方法调用
在这里插入图片描述

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;}

在这里插入图片描述

转载地址:http://xeqwi.baihongyu.com/

你可能感兴趣的文章
Android应用技巧总结
查看>>
Android创建sdcard详细图解
查看>>
Android开发:如何实现TCP和UDP传输
查看>>
Android电源管理相关应用技巧分享
查看>>
Android录音失真具体解决方案
查看>>
Android根文件系统相关应用介绍
查看>>
Android文件系统深入剖析
查看>>
Android判断网络状态方法详解
查看>>
在Android上实现Junit单元测试的四部曲
查看>>
有效控制Android应用程序的耗电量
查看>>
Android术语列表概览
查看>>
全方位解读Android多媒体框架源码
查看>>
Android音乐编程的管理音频硬件
查看>>
Android UI控件组合应用之一:建立数据模型
查看>>
避免Andriod平台图片失真的图片形式
查看>>
Android之Gridview图片列表
查看>>
objdump的使用方法
查看>>
编译错误处理noproguard.classes-with-local.dex已杀死
查看>>
LTE - CSFB技术
查看>>
GSM链路层信令协议
查看>>