从头开始学java--抽象类&接口

FLUENT Meshing Watertight Geometry工作流入门 - 9 生成体网格 总结一下我们学到的东西。讨论体积网格的重要性,并了解生成体积网格的不同方法。还了解体积网格质量的重要性,并学习如何改进它。 阅读详情


一.抽象类的定义

抽象类,在类名定义前面加上abstract就成了抽象类。抽象类中包含抽象方法。
抽象方法,在方法前加上abstract就成了抽象方法。只定义了方法,没有实现。
抽象类,因为长得太抽象,java虚拟机都不认识,不能建立对象。只有用子类继承了抽象类,并且将抽象类定义的抽象方法实现了之后,才可以建立子类的对象。
一个例子:
abstract class Person
{
	//抽象方法
	public abstract void eat();
	
	//abstract void eat(){} 这不是抽象方法,{}也是函数体
	
	//普通方法,抽象类中可以有普通方法,但是只要有一个抽象方法就是抽象类
	public void walk()
	{
		System.out.println("I am person. I can walk");
	}
}

class Student extends Person
{
	public void eat()
	{
		System.out.println("I am student. I eat 脑白金") ;
	}
}

public class AbstractTest {
	public static void main(String[] args)
	{
		Student student1 = new Student();
		student1.eat();//输出为:  I am student. I eat 脑白金

	}
}


要点:
1.抽象类不能用new创建对象。子类继承抽象类,将抽象类中的抽象方法实现后才可以创建对象,必须保证实现所有的抽象方法,子类如果还有抽象方法也不能创建对象。
2.包含抽象方法的类一定是抽象类。但是抽象类中可以包含非抽象方法。如要一个类不创建对象,可以定义为抽象类,但意义不大,不如构造函数私有化。
3.抽象类的形成:一种是直接定义了一个抽象方法。一种是继承了一个抽象类或者接口,但是没有实现所有的抽象方法。
4.抽象类的作用:强迫子类重写抽象方法,定义子类功能,但是由子类实现。
5.注意,abstract void eat(){}也是有函数体的,{}即函数体。抽象类没有函数体,所以不能有{}。


二.抽象类的使用


抽象类除了被继承之外,也可以使用,但是当然不是建立对象,而是用来引用抽象类的子类对象。即多态的一种表现形式。
abstract class Person
{
	//抽象方法
	public abstract void eat();
}

class Student extends Person
{
	public void eat()
	{
		System.out.println("I am student. I eat 脑白金") ;
	}
}

public class AbstractTest {
	public static void main(String[] args)
	{
		Person person = new Student();
		person.eat();//输出为   I am student. I eat 脑白金
	}
}
要点:
抽象类使用: 抽象类  抽象类变量 = new 继承抽象类的子类();


三.接口的定义

接口可以看成一个特殊的抽象类,但是接口中的方法必须都是抽象的,不涉及任何实现细节。
定义一个接口用关键字interface  实现一个接口用implements关键字。

为什么要用接口呢?
当我们用一个类继承另一个类的时候,继承了类的方法与属性,但是有些属性不是所有类都具有的,在父类中不合适,但是还需要抽象出来,这时候就用到了接口。
接口一般表示类具有某种功能,表示HAS_A而不是IS_A
比如,是Person一定要吃,但是是Person不一定会speakEnglish,所以把这个方法定义在person类中不合适,应该放在接口中,供子类实现。

一个例子:
interface Speak
{
	//定义了一个方法,说英语。表示一种能力,供子类实现
	public abstract void speakEnglish();
}

class Student implements Speak
{
	//Student类实现了speakEnglish()方法,具有了说英语的能力
	public void speakEnglish()
	{
		System.out.println("I am student.I can speak English");
	}
}

public class InterfaceTest {
	public static void main(String[] args)
	{
		Student student = new Student();
		student.speakEnglish();
	}
}


要点:
1.接口不能创建对象,用法大致与抽象类相同。但是接口中不能有非抽象方法。
2.接口中定义方法的修饰符是固定的,public abstract 所以子类实现接口方法的时候必须也用public修饰。
3.java类之间不支持多继承,但是支持多实现,即一个类可以实现多个接口。但是接口可以继承接口,而且可以多继承。

例子:
abstract class Person
{
	//定义一个抽象方法,是人就会吃,所以放在父类是合适的。但是吃什么是不一定的,所以定义为抽象方法,由子类具体实现
	public abstract void eat();
}

interface Speak
{
	//定义了一个方法,说英语。表示一种能力,供子类实现
	public abstract void speakEnglish();
}

interface Jump
{
	//定义个方法,大跳。表示一种能力,供子类实现
	public abstract void jump();
}

class Student extends Person implements Speak,Jump
{
	//Student类继承了Person抽象类,实现eat方法
	public void eat()
	{
		System.out.println("I am student. I eat 脑白金");
	}
	//Student类实现了speakEnglish()方法,具有了说英语的能力
	public void speakEnglish()
	{
		System.out.println("I am student.I can speak English");
	}
	
	//Student类实现了jump()方法。具有了大跳的能力
	public void jump()
	{
		System.out.println("I am student.I can jump");
	}
}

public class InterfaceTest {
	public static void main(String[] args)
	{
		Student student = new Student();
		student.eat();
		student.speakEnglish();
		student.jump();
	}
}

这个类中,Student类继承了Person类,实现了Speak和Jump接口。继承自己父类的方法,同时也具有了接口提供的能力。
输出如下:



四.接口中定义的常量

接口中可以定义常量。接口中的常量和抽象方法都有固定的格式,必须按照格式书写,如果没写全java会给补全,但是不便理解。
例子:
interface Inter
{
	//定义在接口中的常量必须初始化
	public static final int MAX_VALUE = 100;
	public abstract void print();
}

//实现了接口,就可以直接使用接口中定义的常量
class Myclass implements Inter
{
	public void print()
	{
		System.out.println(MAX_VALUE);
	}
}

public class InterfaceTest2 {
	public static void main(String[] args)
	{
		Myclass myclass = new Myclass();
		myclass.print();//输出结果为  100
	}
}

要点:
1.接口中定义常量的格式: public static final 类型 常量名
2.接口中定义抽象方法的格式:public abstract 返回值 方法名
3.实现了接口的类,可以直接使用接口中定义的常量。
4.接口定义常量的时候必须要初始化。





【工程师一次性讲明白系列】什么是电压驻波比 (VSWR) 电压驻波比(VSWR)是电信号传输过程中非常重要的指标,控制VSWR的大小可以提高信号传输效率和系统稳定性。通过优化阻抗匹配,可以有效地减少反射信号,提升通信质量!🚀📡。 阅读详情

相关推荐

N5105核显直通PVE:从黑屏到HDMI输出的完整指南

PCI直通能让虚拟机独占物理设备,但核显直通远没有独显那么轻松。Intel核显与CPU、显示输出链路的强耦合使UEFI引导、GOP驱动、驱动签名等环节都成了黑屏陷阱。在PVE虚拟化环境中,通过IOMMU开启、vfio-pci绑定、OVMF固件和Q35机型配合,可以绕过KVM检测,让Windows虚拟机正确驱动核显,从HDMI口输出画面,并解锁Intel Quick Sync硬解能力。这种方案尤其适合N5105等低功耗迷你主机,可作为客厅HTPC、本地视频硬解或依赖硬件加速的轻量工作台。本文基于N5105平台

weixin_31082403的博客 376

继承和接口

package case3; import java.util.Scanner; public class Task3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String pppName = sc.next(); int pppAge = sc.nextIn...

NJU phd 在读。 626

STM32输入捕获功能,同时捕获8路波形。

STM32输入捕获功能,使用TIM2和TIM3同时捕获8路波形。 工作上的一个需求,要采集两组控制步进电机的信号。就是采集8个通道的方波,测量频率和计脉冲个数。看起来简简单单的东西,磕磕碰碰搞了两天,走了一些弯路,这里写出来记录一下。顺便理解一下输入捕获个多种用法。 1. 硬件设计 首先看一下用到那些IO口。在STM32手册里找这样TIMx_CHx的就是输入捕获的口了。 这里用了TIM2的4个口和TIM3的4个口。 定义 端口 TIM2_CH1 PA0 TIM2_CH2 PA1 TI

qq_36353009的博客 5126

定义一个Person类,包含姓名(name)、身高(height)、体重(weight),以及speak()方法,该方法的功能是,输出自己的身高和体重信息。 Person类实现Comparable接口

【问题描述】 定义一个Person类,包含姓名(name)、身高(height)、体重(weight),以及speak()方法,该方法的功能是,输出自己的身高和体重信息。 Person类实现Comparable接口,实现比较两个Person对象的大小,比较规则是:身高和体重各占50%权重,以综合计算身高和体重之后的值作为判断对象大小的依据。 最后,定义一个测试类,生成一个数组,该数组有6个元素,每个元素类型是Person,调用Arrays.sort方法对该数组排序。 按照以上描述,以及输出样例的结果,完成程

X131644的博客 3898

18、未来医疗信息学中的太赫兹天线技术

本文探讨了太赫兹天线技术在医疗信息学中的关键作用,重点分析了分裂环谐振器和纳米结构光导天线(PCA)的设计与性能提升方法,介绍了相干与非相干太赫兹检测技术,并通过等效电路模型和数值模拟深入解析PCA工作机理。文章还展示了太赫兹技术在无创血糖监测、肿瘤检测等医疗诊断中的实验应用,总结了其非侵入性、高分辨率成像和多参数分析等优势,同时指出信号检测难、成本高和技术复杂等挑战。未来趋势包括设备小型化、效率提升及与人工智能融合,拓展至药物研发、皮肤与神经疾病诊断等领域,展现出变革医疗健康的巨大潜力。

milk8的博客 146

threadX的USBX的初始化和解初始化的分析。

tx_application_define的最后会使用tx_byte_pool_create创建usb线程的内存空间“ux_device_app_byte_pool”,再创建usb线程,也就是执行。主要就是创建了线程,也就是第3个参数app_ux_device_thread_entry,这个参数内是MX_USB_Device_Init,也就是USB底层初始化。进来的参数只有1个,是memory_ptr,这个就是创建的usb线程空间“ux_device_app_byte_pool”

qq_31885403的博客 647

Day28_7 Java学习之面向对象综合练习

解析1.该题基本涵盖了面向对象的所有知识点,比较考验对于面向对象的基础知识了解。2.从不同的角度分析问题得到的代码也就不一样,虽然结果是相同的,但是我们需要从个个方面去考虑,选择最优的代码,进而增强代码的健壮性,减少所存在bug的可能性。!!httpshttps。...

weixin_43717536的博客 442

YOLOV26详解 从原理到部署

计算机视觉领域最具影响力的目标检测框架迎来重大里程碑。2026年1月,Ultralytics 正式发布 YOLOv26——这不是一次简单的版本迭代,而是一场面向边缘计算时代的架构重构。本专栏基于 Ultralytics 官方技术白皮书、YOLO Vision 2025 大会首发内容及国际前沿研究成果,系统拆解 YOLOv26 从算法原理到工程落地的全栈技术体系。与常规教程不同,我们聚焦与,帮助你在端侧 AI 部署的实战中掌握核心竞争力。

u012133341的博客 2028

java中的serializable_java基础---->Serializable的使用

本次讲解中我们建立一个Java的项目去体会一下序列化Serializable的使用,序列化的原理以及序列化的自定义请参见我的另外一篇博客(java高级---->Serializable序列化的源码分析)目录导航Serializable序列化的简要说明一、 持久化的简单介绍:“持久化”意味着对象的“生存时间”并不取决于程序是否正在执行——它存在或“生存”于程序的每一次调用之间。通过序列化一个对...

weixin_42132352的博客 1676

【LLC快速上手系列】LLC轻载时,死区时间怎么调才对?别再傻傻乱搞了!

死区时间,就是指。如果你死区设得好,就能让开通前 ( V_DS to 0 ),完美实现!

weixin_43199439的博客 1857

需要Perfetto分析的anr

anr类的问题,经常会有系统cpu,内存负载不高,iowait也不高,主线程状正常的,这类问题通过常规的日志无法分析,需要抓取Perfetto来分析应用的情况。event log中也没有异常。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 63

JAVA_抽象类和接口

JAVA_抽象类和接口 1.编写程序,其中包含一个抽象类Person,两个类:Chinese和American。 (1)抽象类Person中包含一个名为name的变量用于存储姓名,使用构造方法对name进行赋值。 (2)抽象类Person包含一个名为sayHello的公共抽象方法声明,在控制台显示问好信息。 (3)Chinese和American这两个类继承了Person抽象类。 (4)Chine...

waylonZXH的博客 4138

python3.12 百分百解决安装dlib失败问题【研究原理后Bug已解决】

python3.12 百分百解决安装dlib失败问题【研究原理后Bug已解决】 python3.12版本下安装dlib失败。截图如下。试了网上很多方法都失败,耗费了很多时间终于找到适用于python3.12版本安装dlib的方法,亲测百分百成功。几乎尝试了所有的方法都不太行。终于找到安装的方法了。 原因分析: 版本匹配问题。我们现在是python3.12 使用pip根本无法安装。下面我们一起手动安装,1分钟搞定。

一键难忘的博客 7130

【Java 学习】:抽象类 & 接口 & Object 类

本文详细介绍了Java中的抽象类和接口的概念到底是什么,以及其特性和作用。抽象类是不能实例化的,主要用于被继承,通过子类重写抽象方法实现多态。接口是一种特殊的抽象类,包含全局常量和抽象方法,一个类可以实现多个接口,从而实现多继承的效果。文章通过实例代码展示了如何使用抽象类和接口,并总结了两者的区别,强调了它们在面向对象编程中的重要性

island1314的博客 5161

lwip-2.0.3

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

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java抽象类和接口

本篇文章我们只谈了两件事:抽象类-接口。抽象类和接口是Java中两个非常重要的概念,它们各有独特的优势,共同特点是都很抽象。

LEE180501的博客 4656

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【Java】抽象类和接口

抽象类、接口的介绍和区别

trong_ 的烂笔头 3895

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java 抽象类和接口

文章目录一、抽象类1.抽象类1.1抽象类的定义1.2抽象方法的定义方式1.3抽象类的定义方式2.抽象类和实例类的区别3.抽象类示例4.抽象类的特征二、接口1.接口1.1接口的定义1.1定义一个接口1.2 接口的使用1.3接口的注意事项2.接口示例3.接口的特征三、抽象类和接口的区别 一、抽象类 1.抽象类 1.1抽象类的定义 在Java面向对象当中,所有的对象都是用过类进行描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类没有包含足够多的信息来描述一个具体的对象,这样的类就是抽象类。 1.2抽象方法的

WYSCODER的博客 4869

Java——抽象类&接口

目录前言抽象类抽象类中的成员抽象类的特点抽象类的构造方法抽象类的应用接口概述接口的成员接口中成员的访问接口的实现使用接口的核心原因 前言 将抽象类和接口的笔记总结了一下发出来,希望大家可以互相学习,如有错误请指出。 抽象类 抽象类:使用abstract关键字修饰的类就是抽象类 修饰符 abstract class 类名{ } 抽象类中的成员 成员变量 成员方法 构造方法 抽象方法 抽象类的特点 有抽象方法的类一定是抽象类,抽象类不一定有抽象方法 抽象类不能被创建对象,需要被子类继承 抽象类的子

qq_44331253的博客 7690

JAVA抽象类和接口

Java中抽象类和接口的介绍

weixin_64903131的博客 5101

Java学习之抽象类&接口

一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。接口就是一种公共的规范标准,Java中的接口更多的体现在对行为的抽象!

qq_53723728的博客 1497

【Java】抽象类&接口

抽象类;实现多个接口;接口之间的关系;Comparable接口;Comparator接口;Clone接口;抽象类与接口的区别

qq_74455045的博客 2621

【java】抽象类和接口

作者还是一个萌新,如果有什么讲的不对的地方欢迎在评论区指出,希望能够和你们一起进步✊。

acm_pn的博客 1350

Java之接口&抽象类&注解

需要继承使用作用:抽象类更多偏向于对模板的设计特点:由 abstract 修饰的类叫做抽象类,也可使修饰抽象方法abstract 修饰的抽象方法可以不在抽象类中实现,但子类必须重写并实现该方法只有抽象类当中才能有抽象方法,普通类中不能有抽象方法抽象类中不一定全是抽象方法,也可以有普通方法,普通方法可以不被子类重写抽象类不能被实例化,但是可以使用多态final 不能和 abstract 同时使用final 修饰的方法禁止被重写abstract 修饰的方法要求子类重写两者相互冲突。

SOS_suyan的博客 1278

从零开始学java--抽象类、接口、枚举类

Java面向对象基础篇——抽象类、接口、枚举类

PluMage11的博客 1713

Java抽象类&接口

抽象类是一个不能直接实例化的类,它可以包含抽象方法(没有实现的方法)和非抽象方法(有实现的方法)。抽象类的目的是提供一个类的基本框架,子类可以继承并实现抽象方法,或者直接使用非抽象方法。

Juebiebo的博客 1324

Java SE(10)——抽象类&接口

修饰的类就是。

2401_89167985的博客 1546
上一篇: 从头开始学java-继承
下一篇: 从头开始学java--多态
puppet_master
puppet_master 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄12年 2695粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值