java 接口和类之间的关系

目录

🌏1. 理解接口的概念

🌎2. 学会接口的语法(关键字implements)

🌍3. 掌握接口的用法

🌏4. 明白接口的特性

🌏5. 教你如何实现多个接口

🌎6. 接口之间是怎么继承的

🌏7. 给接口举个例子

🗺️7.1 Comparable接口

🗺️7.2 比较器Comparator

🌍8. Clonable接口和深拷贝

🗺️8.1 Cloneable接口

🗺️8.2 浅拷贝

🗺️8.3 深拷贝

🌎9. 接口和抽象类的区别

🌏1. 理解接口的概念

接口就是公共的规范标准,如果要使用就要遵守这个标准,

而在Java中,接口可以看成是:一种特殊的类,

它的规范标准就是,里面全部都是由全局常量和公共的抽象方法组成,

并且它是解决java无法使用多继承的一种手段,所以如果要使用就要遵守这个标准

🌎2. 学会接口的语法(关键字implements)

🟩使用interface来修饰接口

注意:

(1)创建接口时,接口的命名一般以大写字母 I 开头

(2)建议接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性

🌍3. 掌握接口的用法

🟥接口是不能直接使用的,必须要有一个类来实现该接口,实现接口中的所有抽象方法

格式就是这样

class 类名称 implements 接口名称{

复制代码
   //

}

🌏4. 明白接口的特性

🤠(1)接口当中的成员变量,默认都是 public static final 修饰的

🤠(2) 接口中的成员方法,默认都是抽象方法

复制代码
      也就是public abstract 修饰的

🤠(3)接口中的普通成员方法,是不能有具体的实现的

这里就报错了

🤠(4)接口中的普通成员方法,如果要有具体实现,就必须加上default【从JDK8开始】

🤠(5) 接口中可以有静态的成员方法,

复制代码
      但是不管是静态方法还是default方法都是public修饰的

🤠(6)接口本身也是不可以进行实例化的

🤠(7) 类和接口的关系是使用 implements 来关联的

🤠(8)一个接口可以引用,具体实现类的,向上转型

🤠 (9)接口中不能有静态代码块,实例代码块,构造方法

🤠(10)一个抽象类实现一个接口,可以不重写这个抽象方法,但是这个类一旦被使用,就也要重写构造方法

🌏5. 教你如何实现多个接口

java中是不支持多继承的,一个类只能有一个父类,那么如何实现多个类的使用

这就要用到接口了

一个类可以实现多个接口。

下面看例子

这个是个抽象类动物

abstract class Animal {

public String name;

public int age;

复制代码
public Animal(String name, int age) {
    this.name = name;
    this.age = age;
}
public abstract void eat() ;

}

然后再看两个接口

interface IRunning {

public void run() ;

}

interface IFlying {

public void fly();

}

下面创建一个动物 狗

⚜️如何使用接口呢,很简单,直接在子类继承父类的后面 加关键字 然后连接接口就可以了

class Dog extends Animal implements IRunning{

public Dog(String name, int age) {

super(name, age);

}

复制代码
@Override
public void eat() {
    System.out.println(name + "正在吃狗粮! ");
}
@Override
public void run(){
    System.out.println(name+" 正在跑 ");
}

}

再创建一个动物 鸟

这里注意,在创建鸟时使用了两个接口 关键字implements后面 跟两个接口,中间用逗号连接

并且还要注意的是,一个类在实现多个接口的时候,每个接口中的抽象方法都要实现,否则类必须设置成抽象类

class Bird extends Animal implements IRunning,IFlying{

复制代码
public Bird(String name, int age) {
    super(name, age);
}

@Override
public void eat() {
    System.out.println(name + "正在吃鸟粮! ");
}
@Override
public void run(){
    System.out.println(name+" 正在慢跑走 ");
}
@Override
public void fly(){
    System.out.println(name+" 正在用翅膀飞 ");
}

}

上面的这个例子,说明了java中 ,

一个类继承一个父类,同时实现多种接口

而接口表达的作用是,具有___功能或特性

🌎6. 接口之间是怎么继承的

类和类之间是单继承的,一个类可以有多个接口,接口和接口之间是可以多继承的。

也就是,用接口就可以实现多继承。

下面看代码,例子

interface IA {

void funcA();

}

interface IB{

void funcB();

}

//扩展功能--接口的继承

interface IC extends IA,IB{

void funC();

}

class T implements IC {

@Override

public void funcA() {

}

@Override

public void funcB() {

}

@Override

public void funC() {

}

}

这个例子中,为了实现接口的继承,

使用了extends关键字,在关键字后面跟两接口,中间用逗号连接

接口之间的继承相当于把多个接口合并在一起,也就是扩展功能

🌏7. 给接口举个例子

🗺️7.1 Comparable接口

🤠比较自定义类型的大小接口Comparable<>

如果是自定义类型数据,需要比较大小,那就要先明确根据什么去比较大小,

这里也可以简化一下代码

复制代码
@Override
public int compareTo(Student o) {
    return this.age - o.age;
}

这里的this就是student,o就是student1,这两个根据age比较大小

复制代码
public static void main(String[] args) {
    Student student = new Student("zhang san",20,60);
    Student student1 = new Student("li si",21,70);
    Student student2 = new  Student("wang wu",21,80);
    if(student.compareTo(student1) > 0){
        System.out.println("student > student1");
    }else if (student.compareTo(student1) == 0){
        System.out.println("student == student1");
    }else {
        System.out.println("student < student1");
    }
}
public static void main(String[] args) {
    Student[] students = new Student[3];
    students[0] = new Student("zhang san",22,60);
    students[1] = new Student("li si",21,70);
    students[2] = new  Student("wang wu",21,80);
    System.out.println("排序前" + Arrays.toString(students));
    Arrays.sort(students);
    System.out.println("排序后" + Arrays.toString(students));
}
相关推荐
Absurd58717 分钟前
JavaScript中模块化在游戏引擎开发中的资源调度作用
jvm·数据库·python
2301_815279521 小时前
SQL如何利用聚合函数生成业务分析指标_KPI计算基础教程
jvm·数据库·python
小江的记录本1 小时前
【分布式】分布式核心组件——分布式锁:Redis/ZooKeeper/etcd 实现方案(附全方位对比表)、优缺点、Redlock、时钟回拨问题
java·网络·redis·分布式·后端·zookeeper·架构
qq_330037991 小时前
mysql如何排查Out of memory错误_mysql内存分配调优
jvm·数据库·python
好家伙VCC1 小时前
**发散创新:用Rust实现基于RAFT共识算法的轻量级分布式日志系统**在分布式系统中,**一致性协议**是保障数据可靠
java·分布式·python·rust·共识算法
weixin_458580122 小时前
如何在 Go 中直接将 AST 编译为可执行二进制文件?
jvm·数据库·python
晔子yy2 小时前
【JAVA探索之路】从头开始讲透、实现单例模式
java·开发语言·单例模式
阿正的梦工坊7 小时前
JavaScript 微任务与宏任务完全指南
开发语言·javascript·ecmascript
2301_816660218 小时前
PHP怎么处理Eloquent Attribute Inference属性推断_Laravel从数据自动推导类型【操作】
jvm·数据库·python
第一程序员8 小时前
数据工程 pipelines 实践
python·github