当前位置: 首页 > news >正文

Java面向对象-接口

在这里插入图片描述


Java面向对象-接口

  • 一、JDK1.8之前
  • 二、接口的作用
  • 三、JDK1.8之后,新增非抽象方法
  • 四、静态方法

一、JDK1.8之前

1、类是类,接口是接口,它们是同一层次的概念
2、接口中没有构造器
3、接口如何声明:interface
4、在jdk1.8之前,接口只有两部分内容
a、常量 public static final
b、抽象方法 pubilc abstract
注意:修饰符可以省略不写,ide会帮助你自动补全
5、类和接口的关系是什么? 实现关系,类实现接口
6、一旦实现一个接口,那么实现类要重写接口中全部的重写方法
7、如果没有全部重写抽象方法,那么这个类变成一个抽象类
8、java只有单继承,java还有多实现
一个类继承其他类,只能直接继承一个父类
但是实现类实现接口的话,可以实现多个接口
9、写法:先继承 再实现 class Student extends Person implements TestInterface01, TestInterface02
10、接口不能创建对象

package com.msb_interface;/*
1、类是类,接口是接口,它们是同一层次的概念
2、接口中没有构造器
3、接口如何声明:interface
4、在jdk1.8之前,接口只有两部分内容a、常量  public static finalb、抽象方法 pubilc abstract注意:修饰符可以省略不写,ide会帮助你自动补全*/
public interface TestInterface01 {//常量/*public static final*/ int NUM = 10;//抽象方法/*public abstract*/ void a();/*public abstract*/ void b(int num);/*public abstract*/ int c(String name);
}interface TestInterface02 {void e();void f();
}/*5、类和接口的关系是什么? 实现关系,类实现接口
6、一旦实现一个接口,那么实现类要重写接口中全部的重写方法
7、如果没有全部重写抽象方法,那么这个类变成一个抽象类
8、java只有单继承,java还有多实现
一个类继承其他类,只能直接继承一个父类
但是实现类实现接口的话,可以实现多个接口
9、写法:先继承 再实现 class Student extends Person implements TestInterface01, TestInterface02*/
class Student extends Person implements TestInterface01, TestInterface02 {@Overridepublic void a() {System.out.println("a.....");}@Overridepublic void b(int num) {System.out.println("b.....");}@Overridepublic int c(String name) {return 0;}@Overridepublic void e() {System.out.println("e.....");}@Overridepublic void f() {System.out.println("f.....");}
}class Test{public static void main(String[] args) {//10、接口不能创建对象TestInterface01 t =new Student();  //接口指向实现类——》多态//11、接口中的常量如何访问System.out.println(TestInterface01.NUM);System.out.println(Student.NUM);Student s = new Student();System.out.println(s.NUM);TestInterface01 t1 = new Student();System.out.println(t1.NUM);}
}

二、接口的作用

定义规则:只是跟抽象类不同地方在哪?它是接口不是类
接口定义好规则之后,实现类负责实现即可

继承:子类对父类的继承
实现:实现类对接口的实现

继承:收集 extends 照相机 “is-a”的关系,手机是一个照相机。
上面的写法不好。
实现:收集 implements 拍照功能 “has-a”的关系,手机具备照相的能力。

案例:飞机、小鸟、风筝

多态的应用场合:
1、父类当作方法的形参,传入具体的子类的对象
2、父类当作方法的返回值,返回的是具体的子类的对象
3、接口当作方法的形参,传入具体的实现类的对象
4、接口当作方法的返回值,返回的是具体的实现类的对象

三、JDK1.8之后,新增非抽象方法

被public default修饰的非抽象方法:
注意1:default修饰符必须要加上,否则出错。
注意2:实现类中要是想重写接口中的非抽象方法,那么default修饰符必须不能加,否则出错。

package com.msb_interface1;public interface TestInterface {//常量public static final int num =10;//抽象方法public abstract void a();//public default修饰的非抽象方法public default void b(){System.out.println("--TestInterface---b()----");}
}class Test implements TestInterface{@Overridepublic void a() {System.out.println("重写了a方法");}@Overridepublic void b() {TestInterface.super.b();}public void c(){//用接口中的b方法b();  //可以
//        super.b();  不可以TestInterface.super.b(); //可以}
}

四、静态方法

static不可以省略不写
静态方法不能重写

package com.msb_interface1;public interface TestInterface2 {// 常量public static final int NUM = 10;// 抽象方法public abstract void a();//public default非抽象方法、public default void b() {System.out.println("----b----");}//静态方法public static void c() {System.out.println("---c--");}
}class Demo implements TestInterface2{@Overridepublic void a() {System.out.println("重写了a方法");}public static void c() {System.out.println("---Demo中的c方法--");}
}class A{public static void main(String[] args) {Demo d = new Demo();d.c();Demo.c();TestInterface2.c();}
}
---Demo中的c方法--
---Demo中的c方法--
---c--

为什么要在接口中加入非抽象方法?
如果接口中只能定义抽象方法,那么我要是修改接口中的内容,那么对实现类的影响太大了,所有实现类都会受到影响。
现在在接口中加入非抽象方法,对实现类没有影响,想调用去调用即可。

http://www.lryc.cn/news/374140.html

相关文章:

  • 怎么不使用springboot Helper或Spring Initializr来创建spring项目
  • STM32CubeMX配置-RTC周期唤醒
  • js如何添加新元素到数组中
  • Python变量和基本数据类型
  • 嵌入式数据库_1.嵌入式数据库的定义及特点和分类
  • 新人学习笔记之(变量)
  • Windows修改CMD窗口编码为UTF-8
  • os实训课程模拟考试(1~7)
  • yolov10 学习笔记
  • NAT概述
  • Ansys Mechanical|学习方法
  • 热门开源项目ChatTTS: 国内语音技术突破,实现弯道超车
  • 环形链表2证明
  • fetch_lfw_people()报错urllib.error.HTTPError: HTTP Error 403: Forbidden的解决方案
  • Verilog-Behavior Level 和 RTL Level 和 GATE Level的区别
  • 华为OD机考题HJ1 字符串最后一个单词的长度
  • C语言---------深入理解指针
  • C++ 算法教程
  • 【支持向量机】问题梳理
  • 车载网络安全指南 网络安全框架(二)
  • 元数据、数据元、数据字典、数据模型及元模型的区别详解
  • 【百度智能体】零代码创建职场高情商话术助手智能体
  • 实战项目: 负载均衡
  • 运维监控系统
  • 第3章 Unity 3D着色器系统
  • Qt项目天气预报(1) - ui界面搭建
  • 一、从C语言到C++(一)
  • MySQL(5)
  • 区块链之快照
  • 自学前端第一天