一、抽象类

1.概念

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

什么是抽象

2.抽象类以及抽象方法格式定义

抽象类:public abstract class A{ }

抽象方法: abstract void method(); // 注意:抽象方法是没有方法体的,也就是没有大括号{}

举例:

// 先定义抽象类,里面有一个抽象方法

public abstract class Area{
// 定义抽象方法
abstract void area();
}
// A类继承抽象类
public class A extends Area{
@Override
void area() {
System.out.println("我是A");
}
}
// B类继承抽象类
public class B extends Area{
@Override
void area() {
System.out.println("我是B");
}
}

3.抽象类总结规定

  1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。

  2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

  3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。

  4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。

  5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

二、接口

1.什么是接口

一个类当中,所有的方法都是抽象方法,这个类就是作为制定规则的一个类,所有子类必需强制重写该类的所有方法。声明规则的就称之为接口。

  • 接口也是一种引用数据类型。
  • 接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。

2.接口的定义

接口用关键字interface关键字修饰;

public interface 接口名 {}

接口不能创建对象, 我们可以创建接口的子类,将抽象方法重写之后进行使用;

接口和类之间不是继承关系,是实现关系,实现接口用implements关键字表示;

public class 类名 implements 接口名 {}

接口的子类(实现类),要么重写接口中的所有抽象方法,要么子类也是抽象类,最终也将重写所有抽象方法。

接口的实现类,支持多实现,可以实现多个接口文件。

public class 类名 implements 接口1,接口2 {}

3.接口特性

  1. 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
  2. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
  3. 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

4.抽象类和接口的区别

  1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
  2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
  3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
  4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

5.继承抽象类和实现接口的异同

  1. 继承抽象类,必须重写抽象类中所有抽象方法。
  2. 继承普通类,可以重写也可以不重写父类的方法。
  3. 实现接口则必须实现接口中的所有方法。

6.规则

  • 重写接口中声明的方法时,需要注意以下规则:
  1. 类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。
  2. 类在重写方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型。
  3. 如果实现接口的类是抽象类,那么就没必要实现该接口的方法。
  • 在实现接口的时候,也要注意一些规则:
  1. 一个类可以同时实现多个接口。
  2. 一个类只能继承一个类,但是能实现多个接口。
  3. 一个接口能继承另一个接口,这和类之间的继承比较相似。

7.接口在不同的jdk版本中的区别

jdk7及之前的版本中对接口的要求为:

使用interface关键字

接口中的所有成员变量都默认是由public static final修饰的

接口中的所有方法都默认是由public abstract修饰的,可以使用protected,但不能使用private

接口中的所有方法都没有方法体

接口没有构造方法因为构造方法适用于创建对象

实现接口的类必须提供接口中所有方法的具体实现类

可声明静态常量、属性和抽象方法

jdk8:

在jdk7的基础上可以声明静态方法和默认方法,但必须写方法体

public interface MyInterface{

 	public abstract void method1();
abstract void method2();
void method3() ; //默认 public abstract //JDK8:静态方法
public static void method4() {
System.out.println("静态方法");
} //JDK8:默认方法
default void method5() {
System.out.println("默认方法");
}
}

jdk9:

基于jdk8增加了私有静态方法的声明

2022-07-25 第四组 java之抽象、接口的更多相关文章

  1. 2022-07-21 第四组 java之继承

    目录 一.继承 1.概念 2.语法 3.父类成员访问 3.1 子类访问父类的成员变量 3.1.1 子类和父类中不存在同名的成员变量 3.1.2 子类和父类中不存在同名的成员变量 3.2 子类中访问父类 ...

  2. Java阻塞队列四组API介绍

    Java阻塞队列四组API介绍 通过前面几篇文章的学习,我们已经知道了Java中的队列分为阻塞队列和非阻塞队列以及常用的七个阻塞队列.如下图: 本文来源:凯哥Java(kaigejava)讲解Java ...

  3. 四种Java线程池用法解析

    本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 执行一个异步任务你还只是如下 ...

  4. Java多线程(四)java中的Sleep方法

    点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...

  5. 佛系结对编程---四则运算(Core 第四组)

    ----by core 第四组 ( 邹卫其 范力 ) 一. 项目介绍 1. 能自动生成小学四则运算题目并给出答案,生成题目时可以选择下列参数:   1)生成题目数量   2)每道题目中运算数数量   ...

  6. 第四组项目总结(UML图设计)

    第四组项目总结(UML图设计) 相关链接: 墨刀原型链接:https://pan.baidu.com/s/1qrVI_je8NONVHT_FwH6Pwg 需求文档链接:https://www.cnbl ...

  7. 《手把手教你》系列基础篇(八十四)-java+ selenium自动化测试-框架设计基础-TestNG日志-上篇(详解教程)

    1.简介 TestNG还为我们提供了测试的记录功能-日志.例如,在运行测试用例期间,用户希望在控制台中记录一些信息.信息可以是任何细节取决于目的.牢记我们正在使用Selenium进行测试,我们需要有助 ...

  8. JUC(5)BlockingQueue四组API

    1.读写锁ReadWriteLock package com.readlock; import java.util.HashMap; import java.util.Map; /** * ReadW ...

  9. PBOC金融IC卡,卡片与终端交互的13个步骤,简介-第四组(转)

    十:联机处理-可选项终端根据卡片行为分析的结果,执行对应的处理.若卡片响应联机,则终端发起联机操作.联机处理使得发卡行后台可以根据基于后台的风险管理参数检查并授权批准或拒绝交易.除了传统的联机欺诈和信 ...

随机推荐

  1. go convert slice to struct

    Question: in golang how to convert slice to struct scene 1:use reflect convert slice to struct func ...

  2. Java学习笔记-基础语法Ⅵ-异常

    异常 对于异常,JVM默认处理方案为:把异常名称.异常原因以及异常出现的位置等信息输出在控制台,并且程序停止执行 异常处理方式一:try ... catch public class Demo { p ...

  3. unity---2d游戏杂记

    2d游戏制作的笔记 save Layout 增加配置 Packges文件夹 插件 调整视野 鼠标中键 拉近拉远 鼠标右键 平移 Alt+鼠标左键 移动视角 Pivot/Center 当前物体中心和多个 ...

  4. hadoop联合hive基础使用

    sqoop路径:/opt/module/sqoop 把指定文件放到hadoop指定路径:hadoop fs -put stu1.txt /user/hive/warehouse/stu hive启动( ...

  5. Tmux终端复用神器使用心得

    tmux在连接远程服务器做实验时很有帮助,可以为每一个项目设置一个Session,在Session中设置不同的Window同时跑多个实验,Window本身还可以分割为多个Pane,在一个视野内利用多个 ...

  6. Border性质习题与证明

    KMP 第一次接触 \(border\) 都是先从 KMP 开始的吧. 思想在于先对于一个串自匹配以求出 fail 指针(也就是 border) 然后就可以在匹配其他串的时候非常自然的失配转移.在此顺 ...

  7. docker服务部署、迁移与备份、dockerfile、私有仓库

    今日内容概要 服务部署 迁移与备份 dockerfile 私有仓库 内容详细 1.服务部署 # 装 mysql redis --->源码编译安装-->启 动 # 有了docker后,容器操 ...

  8. ruoyi前后端分离版:添加新页面,不需登录也可访问

    添加QRcode页面代码 <template> <div class="register"> <el-form ref="registerF ...

  9. CSS元素的几种显示模式

    元素的显示模式 元素的显示模式就是元素以生么方式进行显示,比如<div>自己占一行,比如一行可以放多个<span>. HTML元素一般分为块元素和行内元素. 块元素 常见的块元 ...

  10. Kubernetes Job Controller 原理和源码分析(三)

    概述Job controller 的启动processNextWorkItem()核心调谐逻辑入口 - syncJob()Pod 数量管理 - manageJob()小结 概述 源码版本:kubern ...