Java的抽象类与接口使用

量化器:Quanta是一个开源社交媒体(Fediverse)平台,用于Wiki,微博客,协作,发布,安全消息传递,文件共享和视频音频共享。 基于浏览器,并用Java和TypeScript编写 广达网络平台 欢迎来到Fediverse! 加入Fediverse! Quanta是一种新型的分散式和联合社交媒体平台。 通过Wiki,博客,文档协作,对话线程,加密的安全消息传递,视频/音频记录和共享,文件共享,podcatcher等独特而强大的功能连接到Fediverse。 创建层次结构化的内容文本,文档,图像,音频和视频,这些内容始终可编辑,可在Fediverse上共享并保存在IPFS上。 Quanta是一个内容发布/托管平台,其中所有内容都存在于树形数据库中,并且每个用户都拥有该全局树上的一个分支,该分支可以与其他用户共享。 树上的每个数据都称为“节点”,每个节点都有其自己的唯一URL,并且可以标记文本(和/或图像和任意文件附件),并且可以与其他特定用户共享或公开。 一个节点可以代表从完整文档到一个段落甚至是内容的一句话的任何内容,并且用户可以自行创建所需的内容并根据需要进行结构化。 实时测试实例: 技术堆栈摘要 后端(服务器端) Java语言 Spring Boot Web应用 在嵌入式Tomcat中运行 使用ajax / JSON进行所有浏览器调用的类似REST 立即下载

Java的抽象类与接口

一、抽象类
在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种只有声明,而没有具体的实现的特殊的方法。抽象方法的声明格式为:

abstract void Quanta();

抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。但是它的子类可以创建对象。

Public abstract class Quanta {
	abstract void fun();
}

我们都知道,父类是将子类所共同拥有的属性和方法进行抽取,这些属性和方法中,有的是已经明确实现了的,有的还无法确定,那么我们就可以将其定义成抽象,在后面的子类进行重用,进行具体化。这样,抽象类也就诞生了。

例如,定义了“动物”父类,其中“动物名称”和“动物年龄”属性已经明确了,但是“动物叫”的方法没有明确,此时就可以将“动物叫”定义为抽象方法。

包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类要注意这几点:

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

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

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

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

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

  6. 外部抽象类不能用final、static声明。

示例:

package Course;

abstract class Student{
	//私人变量
	private String name;
	private int age;
	
	//构造方法
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public void print1() {
		System.out.println(name);
	}
	
	public abstract void print2();
}

public class abstractTest {
}

如果我们在public class abstractTest {}中尝试实例化,系统就会报错:
可以看到报错信息
我们可以采用另外一种办法来实例化它:
我们创建一个NewStudent类extends我们的抽象类,再实例化NewStudent

package Course;

abstract class Student{
	//私人变量
	private String name;
	private int age;
	
	//构造方法
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public void print1() {
		System.out.println(name);
	}
	
	public abstract void print2();
}

class NewStudent extends Student{

	public NewStudent(String name, int age) {
		super(name, age);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void print2() {
		// TODO Auto-generated method stub
		System.out.println("继承了");
	}
	
}

public class abstractTest {
	public static void main(String[] args) {
		Student student = new NewStudent("quanta", 0);
	}
}

注意:在父类中定义的抽象方法,在子类中必须实现(即方法重写)如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

二、接口
接口,英文称作interface,在软件工程中,接口泛指供别人调用的方法或者函数。从这里,我们可以体会到Java语言设计者的初衷,它是对行为的抽象。在Java中,定一个接口的形式如下:

[public] interface InterfaceName {
 
}

接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

接口的使用
由于接口里面存在抽象方法,所以接口对象不能直接使用关键字new进行实例化。接口的使用原则如下:
(1)接口必须要有子类,但此时一个子类可以使用implements关键字实现多个接口;
(2)接口的子类(如果不是抽象类),那么必须要覆写接口中的全部抽象方法;
(3)接口的对象可以利用子类对象的向上转型进行实例化。

接口特性

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

简单一例:

package Course;

//定义一个接口A
interface A {
	public static final String a = "Quanta";//一个全局变量
	
	public abstract void print();//定义一个抽象方法
}

interface B{
	public abstract void get();
}

class Test1 implements A{

	@Override
	public void print() {
		// TODO Auto-generated method stub
		
	}
}

class Test2 implements A,B{

	@Override
	public void get() {
		// TODO Auto-generated method stub
		System.out.println("Quanta");
		
	}

	@Override
	public void print() {
		// TODO Auto-generated method stub
		System.out.println("Hello Quanta");
	}
	
}

public class InterfaceTest {
	public static void main(String[] args) {
		Test2 test2 = new Test2();//实例化子类对象
		A a = test2;
		B b = test2;//向上转型
		
		a.print();
		b.get();
	}
}

我们再来看看如果这样:

public class InterfaceTest {
	public static void main(String[] args) {
		Test2 test2 = new Test2();//实例化子类对象
		A a = test2;
//		B b = test2;//向上转型
		B b = (B)a;
		
		a.print();
		b.get();
		
		System.out.println(a instanceof A);
		System.out.println(b instanceof B);
	}
}

结果是:

Hello Quanta
Quanta
true
true

接口的继承
一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。

下面的Sports接口被Hockey和Football接口继承:

// 文件名: Sports.java
public interface Sports
{
   public void setHomeTeam(String name);
   public void setVisitingTeam(String name);
}
 
// 文件名: Football.java
public interface Football extends Sports
{
   public void homeTeamScored(int points);
   public void visitingTeamScored(int points);
   public void endOfQuarter(int quarter);
}
 
// 文件名: Hockey.java
public interface Hockey extends Sports
{
   public void homeGoalScored();
   public void visitingGoalScored();
   public void endOfPeriod(int period);
   public void overtimePeriod(int ot);
}

Hockey接口自己声明了四个方法,从Sports接口继承了两个方法,这样,实现Hockey接口的类需要实现六个方法。

相似的,实现Football接口的类需要实现五个方法,其中两个来自于Sports接口。

接口的多继承
在Java中,类的多继承是不合法,但接口允许多继承。

在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。 如下所示:

public interface Hockey extends Sports, Event

标记接口
最常用的继承接口是没有包含任何方法的接口。

标记接口是没有任何方法和属性的接口.它仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情。

标记接口作用:简单形象的说就是给某个对象打个标(盖个戳),使对象拥有某个或某些特权。

例如:java.awt.event 包中的 MouseListener 接口继承的 java.util.EventListener 接口定义如下:
package java.util;
public interface EventListener
{}

没有任何方法的接口被称为标记接口。标记接口主要用于以下两种目的:

建立一个公共的父接口:
正如EventListener接口,这是由几十个其他接口扩展的Java API,你可以使用一个标记接口来建立一组接口的父接口。例如:当一个接口继承了EventListener接口,Java虚拟机(JVM)就知道该接口将要被用于一个事件的代理方案。

向一个类添加数据类型:
这种情况是标记接口最初的目的,实现标记接口的类不需要定义任何接口方法(因为标记接口根本就没有方法),但是该类通过多态性变成一个接口类型。

CSP-J 复试考点 可以用来训练思维,对于学习时间短的同学,动态规划可以帮助你迅速进入编程状态,也有助于帮你发现题目背后可能隐藏的更简便的算法。动态规划、贪心都是和子问题相关的,动态规划的基本思想是将一个大的问题划分成子问题,接着分别求解,而且能够将一些重复的计算记忆化,大大提高效率。难度加大,会涉及到二分、动态规划之类的算法,容易遗漏考虑点,不易得全分,考试的时候要注意全面性。一般是压轴题,算法不明显,剪枝的搜索、动态规划、状压 DP、树形 DP 、树、图等。枚举算法是指,列举出所有可能的取值,从中找出最优解。 阅读详情

相关推荐

AI Agent辅助企业财务分析与预测

企业财务分析与预测是企业管理中至关重要的环节,准确的财务分析与预测能够帮助企业管理者做出明智的决策,合理规划资源,降低风险。然而,传统的财务分析与预测方法往往依赖于人工经验和简单的统计模型,存在效率低、准确性差等问题。随着人工智能技术的飞速发展,AI Agent作为一种智能的软件实体,能够自主地感知环境、做出决策并采取行动,为企业财务分析与预测带来了新的解决方案。

AI天才研究院 921

Java中抽象类与接口(结合例子)

最近回顾了一下有关抽象类与接口部分的知识,所以对这块儿的知识做了一下小小的总结,此文从两者的定义,使用原则和使用限制作以总结。 1.抽象类的定义: 抽象类只是在普通类的基础上扩充了一些抽象方法而已,而抽象方法指的是只进行了声明,而没有实现的方法(即就是没有方法体)。抽象类和抽象方法使用关键字 abstract 来定义。 举个栗子: abstract class A{ ...

Atalanta1的博客 3730

网课、网页视频倍速播放简单脚本

一个简单的网页视频倍速脚本

huazn612的博客 1万+

java第十一课——抽象类和接口

一:抽象类 1.1抽象类的概念 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 例如,这里有三个类,🐕类和🐱类分别继承Animal,并重写Animal中的bark()方法。对于Animal类而言,并不会指向一个具体的动物,所以其中的bark()方法其实无需进行实现。 ...

baijaiyu的博客 1380

SwinTransformer 改进:SSPCAB模块(2024最新改进方法)

SSPCAB(Spatial Pyramid Pooling with Channel Attention Block)是2024年提出的一种新型神经网络架构改进方法,专注于在保持高精度的同时显著降低计算复杂度和参数量。该方法通过创新的空间金字塔池化与通道注意力机制的结合,实现了网络结构的紧凑化和运算效率的大幅提升。核心创新点1. 混合空间金字塔池化(Hybrid Spatial Pyramid Pooling, HSPP)多尺度动态核池化:根据输入特征图尺寸动态调整池化核大小和步长交叉级联结构。

Henry的博客 1309

车载ECU底软测试:方法与技术的深度解析

底软是运行在 ECU 硬件平台上的基础软件,它为上层应用程序提供了硬件驱动、操作系统服务、通信协议栈等功能。底软的主要功能包括:硬件驱动:负责与 ECU 的各种硬件外设进行通信和控制,如 GPIO、UART、SPI、CAN 等。操作系统服务:提供任务调度、内存管理、中断处理等功能,确保系统的实时性和稳定性。通信协议栈:实现 ECU 与其他 ECU 或外部设备之间的通信,如 CAN、LIN、FlexRay 等。诊断服务:负责对 ECU 的故障进行诊断和处理,并将故障信息存储在故障码存储器中。

天赐好车的博客 1428

Java中抽象类和接口的配合使用

抽象类 用abstract定义,用于抽象出一类物品的公共属性和方法,方法可提供默认的实现。如动物类、车类等等。显然意见,抽象类定义的初衷是为了继承。 子类可以通过extends关键字实现类的继承,与C++不同,Java不能多继承,即:一个类只能有一个父类,所以某些特殊方法就尽量不要放在抽象类中。如动物类(Animal)的捕猎方法(catch)等。 接口类 可以认为是一系列方法的集合,类可以通过

ivysoft 1715

华为OD机试双机位C卷-组装新的数组(Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【组装新的数组】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 组装新的数组。

qq_45776114的博客 1145

JAVA抽象类和接口

Java中抽象类和接口的介绍

weixin_64903131的博客 5101

运放比较电路分析以及应用

摘要:本文介绍了基于LM321运放的同相输入型单限电压比较器电路。该电路通过运放开环工作模式实现电平判断:当输入信号Vs+>0V时输出+15V高电平,Vs+<0V时输出≈0V低电平。典型应用包括直流电压过零检测、交流信号整形、电池欠压报警和数字信号噪声过滤。电路具有结构简单(仅需1个运放和1个电阻)、成本低的优势,适用于传感器信号处理、波形转换等场景。使用时需注意参考电平调整、输出电平匹配等问题,如需抗噪声可增加正反馈电阻构成施密特触发器。该电路是运放实现简单电平逻辑的经典方案。

qq_37999850的博客 401

第8讲:基于CST PCB Studio的电源完整性仿真(IR Drop + PDN)

本文系统介绍了电源完整性(PI)仿真的两大核心模块:直流IRDrop仿真与交流PDN阻抗仿真。文章详细阐述了两种仿真的原理、算法(PEEC和3DFE-FD)及完整操作流程,包括参数配置、软件实操步骤和常见问题解决方案。IRDrop仿真用于分析直流供电压降问题,PDN仿真则针对高频电源噪声和谐振问题。文中还提供了优化建议和故障排查方法,如调整铜箔厚度、优化电容布局等,为高速数字系统的电源完整性设计提供了全面的技术指导。(149字)

一只豌豆象的博客 239

java学习16-接口与抽象类混合使用

为什么要接口与抽象类混合使用? 接口和抽象类都是共性的高级抽象,但是接口有个缺点,如果实例类都实现接口,必须复写接口所有的方法,如果实例类继承抽象类则可以不完全复写所有的方法,那么,实例类可以复写抽象父类的任意一个方法,就不用复写那些多余的方法。 我们可以把程序设计成如图: 程序: package com.dragon.src; /** * * 定义一个接口,声

dragonzard的专栏 1434

BAT031:按列表名单将路径a下的文件夹批量剪切到路径b

摘要:按列表名单将路径a下的文件夹批量剪切到路径b。

qq_31762031的博客 1219

在 Java 中使用接口与使用抽象类的比较

在 Java 中使用接口与使用抽象类的比较

听海边涛声 655

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java中抽象类和接口的使用

本文介绍了Java中的抽象类和接口概念及其特性。抽象类用于描述具有共同特征但不具体实现的对象,通过abstract关键字定义,不能直接实例化,必须被继承并实现其抽象方法。接口则是多个类的公共规范,使用interface定义,通过implements实现,默认包含public static final成员变量和public abstract方法。一个类可以实现多个接口,但必须实现所有抽象方法。抽象类和接口都提供了多态性支持,但抽象类更侧重继承关系,接口则强调行为规范。两者在Java面向对象编程中各有侧重,共同

2301_77311065的博客 2306

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

JAVA接口,继承,和抽象类的使用

是介于普通类和接口之间的一种类型,它可以包含抽象方法(没有方法体)和具体方法(有实现)。抽象类不能直接实例化,必须通过子类继承并实现其中的抽象方法。

妖气当然你 962

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

JAVA中的抽象类与接口的使用

JAVA中的抽象类与接口一、抽象类的含义1.抽象类的使用原则2.抽象类使用限制二、接口的含义 一、抽象类的含义 在了解抽象类之前我们要先知道什么是普通类。普通类具有完整的类功能,不但可以直接产生实例化对象,而且在普通类中可以包含有构造方法、普通方法、static(静态)方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。 那么什么叫抽象方法呢?在所有的普通方法上面都会有一个“{}”,这个表示方法体,有方法体的方法一定可以被对象直接使用。而抽象方法,是指没有方法体的方法,同时抽象方法

spade_Kwo的博客 948

JAVA——接口和抽象类的使用

父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有 意义,而方法主体则没有存在的意义了。我们把没有方法主体的方法称为抽象方法。Java语法规定,包含抽象方法 的类就是抽象类。抽象方法 : 没有方法体的方法。抽象类:包含抽象方法的类。使用abstract关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。定义格式:修饰符 abstract 返回值类型 方法名 (参数列表);

章鱼丸子吖的博客 1448

详谈Java中抽象类和接口的区别和使用场景

抽象类和接口都是实现多态的重要手段,但在使用时需要注意它们之间的区别和应用场景。通常情况下,如果需要定义一组相关的方法并提供默认实现,使用抽象类;如果需要定义一组行为或能力,但不需要默认实现,使用接口。总体来说,抽象类更适合用于一些有共同代码和状态的类层次结构,而接口更适合用于定义规范、实现多态以及解耦不同的类。在实际项目中,可以根据具体需求来选择抽象类和接口。抽象类和接口是 Java 中两种不同的抽象机制,它们都用于定义类的结构,但在一些方面有不同的使用场景。

旷野历程 376

java抽象类和接口使用及区别

文章目录前言一、抽象类1.抽象类的概念2.抽象类的定义3.抽象类的注意事项4.抽象类的意义二、接口1.接口概念1.接口的定义2.接口中的方法和成员变量3.default关键字4.接口的使用5.实现多个接口6.接口的拓展7.接口使用示例三、抽象类和接口的区别1.成员变量2.成员方法3.实现方式总结完! 前言 接上一篇博客Java面向对象三大特性(封装、继承、多态)来了解一下什么是抽象类和接口。 一、抽象类 1.抽象类的概念 我们知道一个普通的类可以有构造方法、普通方法和静态方法,普通成员变量和静态成员变量

爱敲代码的三毛的博客 734

java定义抽象类引用_在Java代码中使用抽象类及接口(抽象类与接口的定义,使用与其作用详解)...

抽象类语法规则:首先我们来看一段代码:class Shape{public void draw(){}}class Cycle extends Shape{@Overridepublic void draw(){System.out.println("⚪");}}class Rect extends Shape {@Overridepublic void draw(){System.out.pri...

weixin_30563851的博客 924

Java学习之抽象类与接口的异同以及两者的使用场景

Java学习之抽象类与接口的异同以及两者的使用场景 相同点: 1. 抽象类和接口都不能被实例化 2. 抽象类和接口都可以定义抽象方法,子类/实现类必须覆写这些抽象方法 不同点: 1. 抽象类有构造方法,接口没有构造方法 2. 抽象类可以包含普通方法,接口中只能是public abstract修饰抽象方法 3. 抽象类只能单继承,接口可以多继承 4. 抽象类可以定义各种类型的成员变量,接口中只能是public static final修饰的静态常量 5. 抽象类在被继承时体现的是is-a关系,接口在被实现时

只须一笑不须愁X的博客 370

Java抽象类与接口:什么是抽象类与接口?JDK 8默认方法是什么?如何正确使用?

Java抽象类与接口:什么是抽象类与接口?JDK 8默认方法是什么?如何正确使用? 在Java开发中,抽象类和接口是常见的设计工具,但很多人却常常混淆它们的概念和使用场景。JDK 8中新增的接口默认方法更让初学者摸不着头脑。今天,猫头虎带你一文彻底搞懂: 抽象类与接口的核心区别 JDK 8默认方法的实现与作用 实战代码演示,如何正确使用它们?

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 3739

Java中抽象类的使用以及与接口的异同

1.什么是抽象类? 在Java中,一个没有方法体的方法就应该定义为抽象方法,而如果一个类中有抽象方法,那么这个类就一定要定义为抽象类。 2.抽象类有什么特点? 抽象类和抽象方法必须使用 abstract 关键字修饰 //抽象类的定义 public abstract class 类名 {} //抽象方法的定义 public abstract void eat(); 抽象类中不一定包含抽象方法,抽象方法所在的类一定是抽象类 抽象类不能实例化 抽象类可以有构造方法 抽象类的子类 要么重

gkkljy的博客 190

Java 抽象类与接口的使用

abstract:抽象的(可以修饰类和方法) interface:接口(一种规范)

739

在Java代码中使用抽象类及接口(抽象类与接口的定义,使用与其作用详解)

抽象类 语法规则: 首先我们来看一段代码: class Shape{ public void draw(){ } } class Cycle extends Shape{ @Override public void draw(){ System.out.println("⚪"); } } class Rect extends Sha...

qq_45691220的博客 1039
下一篇: Fragment讲解
CacheU
博客等级 码龄8年 3粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值