一、抽象类

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. linux下nginx软件的学习

    参考博客 1.nginx是什么 nginx是一个开源的,支持高性能,高并发的web服务和代理服务软件.它是开源的软件. nginx比它大哥apache性能改进许多,nginx占用的系统资源更少,支持更 ...

  2. Kafka 基础概念及架构

    一.Kafka 介绍 Kafka是⼀个分布式.分区的.多副本的.多⽣产者.多订阅者,基于zookeeper协调的分布式⽇志系统(也可以当做MQ系统),常⻅可以⽤于web/nginx⽇志.访问⽇志,消息 ...

  3. API Schema in kubernetes

    目录 什么是schema 数据库中的schema Kubernetes中的schema 通过示例了解schema 什么是schema schema一词起源于希腊语中的form或figure,但具体应该 ...

  4. 一起看 I/O | Flutter 休闲游戏工具包发布

    作者 / Zoey Fan, Product Manager for Flutter, Google 对于大多数开发者来说,Flutter 是一个应用框架.但利用 Flutter 提供的硬件加速图形支 ...

  5. 771. Jewels and Stones - LeetCode

    Question 771. Jewels and Stones Solution 题目大意:两个字符串J和S,其中J中每个字符不同,求S中包含有J中字符的个数,重复的也算 思路:Set记录字符串J中的 ...

  6. RapidIO 逻辑层IO操作与Message操作的原理和区别

    接上一篇 SRIO RapidIO (SRIO)协议介绍(一) 1     说明 查看协议手册时会发现,逻辑层的操作分成了IO和Message 2类动作,那么为什么要分成2类操作?从原理和应用角度来看 ...

  7. 手绘图解java类加载原理

    摘要:这也许是全网"最大"."最细"."最深"的java类加载原理图解了. 本文分享自华为云社区<[读书会第12期]这也许是全网&qu ...

  8. Fail2ban 运维管理 服务控制

    启动监禁 启动所有或者单个监禁项目. # 语法:fail2ban-client start [监禁名称] root@ubuntu:~# fail2ban-client start sshd 停止监禁 ...

  9. mmdetection源码阅读

    2021-11-23号更新 mmdetection中的hook函数 参考: 重难点总结: # step1: 根据官方文档,getattr(self,'name')等同于self.name # sept ...

  10. 2022Gartner容器预测:2025年85%的企业将使用容器管理服务

    近日,国际知名权威分析机构Gartner发布了最新<全球容器管理预测>.预测中指出:在加速的数字化转型驱动下,到2025年全球容器管理领域市场规模将突破14亿美元,预计年复合增长率将达到2 ...