Java接口
接口
接口我们可以看做是抽象类的一种特殊情况,在接口中只能定义抽象的方法和常量:
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;
}
本文地址:https://blog.csdn.net/qq_43652195/article/details/111996092
上一篇: C++ : cin.get()函数和cin函数的使用
下一篇: 疏水阀工作原理(图)