Java入门篇 之 抽象类接口

本篇碎碎念:个人认为压力是一种前进的动力,但是不要有太多压力,不然会使心情烦躁,会控制不住自己的情绪,会在一个临界值爆发,一旦爆发,将迟迟不能消散

今日份励志文案: 努力的背后必有加倍的赏赐

少年要把压力转变为动力哦!!!

目录

 抽象类

下面是抽象方法声明采用的语法以及注意事项:(引用了abstrac关键字)

抽象类的总结

接口

interface使用方法:

implements使用方法:

接口的总结

 抽象类和接口的区别

Object类(简单了解,具体会在下一章讲解)


 抽象类

首先,我们要学习抽象类,尽管在构建具有某些未实现方法的类时,你的第一想法可能是创建接口,但是抽象类仍旧是用于此目的的一种重要的工具。因为你不可能总是使用纯接口

抽象类:如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类

不同的子类可以用不同的方式表示此接口,通用接口建立起一种基本形式,以此表示所有导出类的共同部分,我们创建抽象类是希望通过这个通用接口操作一系列类,为此Java提供了一个叫抽象方法的机制,这种方法是不完整的,仅有声明没有方法体

下面是抽象方法声明采用的语法以及注意事项:(引用了abstrac关键字

abstract class 函数名{abstract void Dog();
}


1.方法被abstract修饰,包含abstract这个类也必须被abstract修饰

代码演示:

2.抽象类不能被实例化

代码演示: 

 

3.如果一个普通类继承了一个抽象类,那么此时,这个类必须重写这个抽象方法

代码演示: 

 

重写之后的代码 

 

public static void main(String[] args){Ball ball=new Basketball() ;ball.play();}

这里运用了向上转型:简单介绍一下,父类引用指向子类对象,具体在博主上一篇Java入门篇 之 多态中有详细介绍

4.抽象类和普通类的区别在于:

(1)可以个普通类一样,有成员变量和成员方法

(2)就是多了抽象方法

(3)多了不能实例化

5.什么情况下要设计为抽象类

如果这个类不能描述一个具体的对象,那么就可以描述为抽象类

对于抽象类使用的代码如下:

abstract class Ball{public String name;abstract void play();{}
}
class Basketball extends Ball{@Overridevoid play() {System.out.println("打篮球");}
}
class Football extends Ball{@Overridevoid play() {System.out.println("踢足球");}
}
class Volleyball extends Ball{@Overridevoid play() {System.out.println("打排球");}
}public static void output(Ball ball){ball.play();}public static void main(String[] args){Ball ball1=new Basketball() ;Ball ball2=new Football() ;Ball ball3=new Volleyball() ;ball1.play();ball2.play();ball3.play();//这是第二种输出方式借用output输出//注意,函数类型是静态的才可以哦,不然会报错的//如果问为什么?//博主回答,静态方法在访问本类的成员时,只允许访问静态成员//而不允许访问实例成员和实例方法Ball[] ball={ball1,ball2,ball3};for (Ball a:ball) {output(a);}}

看完这个代码,你们有没有认为这个代码与多态的代码很像呢?

没错这个就是多态,多态就是一个对象在不同条件下的表现出的不同形式

抽象类的总结

1.被abstract 修饰的方法叫做抽象方法,没有具体的实现的
2.如果一个类 包含了这个抽象方法,此时这个类也必须得用abstract修饰。此时这个类被叫做抽象类
3.抽象类当中 可以有和普通类当中一样的成员变量和成员方法
4.和普通类不一样的地方就是这个抽象类不能被实例化
5.当一个普通类继承了这个抽象类,那么这个普通类必须重写抽象方法。    abstract class Perso    
6.抽象方法不能被private修饰,final修饰,static修饰    

7抽象类当中可以包含构造方法,这个构造方法并不是在实例化这个抽象类的时候使用,因为他就不能被实例化。那么这个构造方法,主要是在子类当中让子类调用,帮助父类进行初始化。

接口

abstract关键字允许人们在类中创建一个或多个没有任何定义的的方法----提供了接口部分,但是没有提供任何相应的具体实现,这些实现是由此类的继承者创建的

interface这个关键字产生了一个完全抽象的类,他根本就没有提供任何具体实现。它允许创建者确定方法名,参数列表和返回类型,但是没有任何方法体,接口只提供了形式,而未提供任何具体实现

任何使用某特定接口的代码都知道可以调用该接口的哪些方式,而且仅需知道这些。因此接口被用来建立类与类之间的关系

要让一个类寻准某个特定接口(或者是一组接口),需要用implements关键字,他表示interface只是他的外貌,但是现在我要声明它是任何工作的,它看起来还很像继承

interface使用方法:


public interface 接口名称{//抽象方法public abstract void method1();public void method2();abstract void method3();void method4();
}

public abstract 是固定搭配,可以不写

在接口中上述写法都是抽象方法,更推荐方式4,代码更简洁

接口不能直接使用,必须要有一个"实现类"来"实现"接口,实现接口中所有的抽象方法

implements使用方法:

public class 类名称 implements 接口名称{//...
}

注意;子类和父类是extends继承关系,类与接口是implements实现关系

代码演示:

class Instrument{public String name;public Instrument(String name){this.name=name;}
}
interface Play{void play();
}
interface Knock{void knock();
}
interface Pull{void pull();
}
class Guitar extends Instrument implements Play,Knock{public Guitar(String name){super(name);// 在给实现子类的构造方法前// 先要用super()调用实现父类的构造方法// 因为父类自己定义了构造方法// 编译器不会自动给给子类构造方法中添加super();}@Overridepublic void play() {System.out.println("弹"+this.name);}@Overridepublic void knock() {System.out.println("敲"+this.name);}
}
public class demo8 {public static void main(String[] args){//实例化对象Guitar guitar=new Guitar("吉他");guitar.play();guitar.knock();}}

接口的总结

1.定义接口的时候使用关键字interface 来定义

2.接口当中的方法如果没有被实现,那么他默认就是一个抽象方法。

3.接口当中的方法不能有具体的实现

4.如果要有具体的实现,那么必须是由default修饰或者是由static修饰

5.接口当中定义成员变量默认都是public static final的

6.接口当中的抽象方法默认都是public abstract修饰的

7.接口是不可以被实例化的

8.类和接口之间的关系可以使用implements来关联

9.接口也是可以产生字节码文件的

10.一个类 可以继承一个抽象类/普通类同时还可以实现这个接口

 抽象类和接口的区别

1.抽象类当中 可以包含和普通类一样的成员变量和成员方法,但是接口当中的成员变量只能是 public static final的方法只能是public abstract的

2.一个类只能继承一个抽象类,但是能够同时实现多个接口,所以解决了java当中不能进行多继承的特性

Object类(简单了解,具体会在下一章讲解)

Object是Java默认提供的一个类(是所有类的先祖)

Java里面出来Object类,所有的类都是存在继承关系的,米热播会继承Object父类。即所有类的对象都可以使用Object的引用接收

接口间的继承

在Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承,

在实例内部类当中,定义一个静态的成员变量,必须是一个常量

Public static final int date=1;

如果有解释的不对或者不清晰,如果可以从评论区指出,我一定会加以修改,万分感谢

希望对你们有所帮助

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/198744.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Word中NoteExpress不显示的问题

首先确认我们以及安装了word插件 我们打开word却没有。此时我们打开:文件->选项->加载项 我们发现被禁用了 选择【禁用项目】(如果没有,试一试【缓慢且禁用的加载项】),点击转到 选择启用 如果没有禁用且没有出…

海康威视综合安防管理平台任意文件上传

系统介绍 HIKVISION iSecure Center综合安防管理平台是一套“集成化”、“智能化”的平台,通过接入视频监控、一卡通、停车场、报警检测等系统的设备,获取边缘节点数据,实现安防信息化集成与联动,公众号:web安全工具库…

使用centos搭建内网的yum源

1.安装httpd服务 2.启动服务,设置开机自启 #启动服务 systemctl start httpd # 设置开机自动启动 systemctl enable httpd systemctl status httpd3.新建一个目录,将rpm文件放到该目录下 4.将/etc/httpd/conf/httpd.conf文件中的DocumentRoot "…

SASS/SCSS精华干货教程

目录 介绍 基本说明 特点 sass语法格式sass的语法格式一共有两种,一种是以".scss"作为拓展名,一种是以".sass"作为拓展名,这里我们只讲拓展名: 编译环境安装 Vscode安装编译插件 简单使用 sass语法扩张…

合并两个有序链表(冒泡排序实现)

实例要求:将两个升序链表合并为一个新的 升序 链表并返回;新链表是通过拼接给定的两个链表的所有节点组成的;实例分析:先拼接两个链表,在使用冒泡排序即可;示例代码: struct ListNode* mergeTwo…

docker的基本使用以及使用Docker 运行D435i

1.一些基本的指令 1.1 容器 要查看正在运行的容器&#xff1a; sudo docker ps 查看所有的容器&#xff08;包括停止状态的容器&#xff09; sudo docker ps -a 重新命名容器 sudo docker rename <old_name> <new_name> <old_name> 替换为你的容器名称…

查询数据库DQL

DQL 查询基本语法 -- DQL :基本语法; -- 1查询指定的字段 name entrydate 并返回select name , entrydate from tb_emp;-- 2 查询 所有字段 并返回select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp;-- 2 查询…

C++ 继承和派生 万字长文超详解

本文章内容来源于C课堂上的听课笔记 继承和派生基础 继承是一种概念&#xff0c;它允许一个新创建的类&#xff08;称为子类或派生类&#xff09;获取另一个已经存在的类&#xff08;称为父类或基类&#xff09;的属性和行为。这就好比是子类继承了父类的特征。想象一下&…

【dc-dc】世微 电动车摩托车灯 5-80V 1.2A 一切二降压恒流驱动器AP2915

产品描述 AP2915 是一款可以一路灯串切换两路灯串的降压恒流驱动器,高效率、外围简单、内置功率管&#xff0c;适用于5-80V 输入的高精度降压 LED 恒流驱动芯片。内置功率管输出最大功率可达 12W&#xff0c;最大电流 1.2A。AP2915 一路灯亮切换两路灯亮&#xff0c;其中一路灯…

微积分在神经网络中的本质

calculus 在一个神经网络中我们通常将每一层的输出结果表示为&#xff1a; a [ l ] a^{[l]} a[l] 为了方便记录&#xff0c;将神经网络第一层记为&#xff1a; [ 1 ] [1] [1] 对应的计算记录为为&#xff1a; a [ l ] &#xff1a; 第 l 层 a [ j ] &#xff1a; 第 j 个神经…

在市场发展中寻变革,马上消费金融树行业发展“风向标”

11月11日&#xff0c;2023金融街论坛年会第三届全球金融科技大会“金融科技创新与合规安全”平行论坛在北京召开。会上&#xff0c;马上消费金融副总经理孙磊就数据对金融的赋能作用、数据安全治理等方面展开了深度讨论。 公开信息显示&#xff0c;马上消费金融是一家经中国银保…

如何将文字、图片、视频、链接等内容生成一个二维码?

通过二维彩虹的【H5编辑】功能&#xff0c;就可以将文字、图片、视频、文件、链接等多种格式的内容编辑在一个页面&#xff0c;然后生成一个自定义的二维码——H5编辑二维码。扫描后&#xff0c;即可查看二维码中的详细图文视频等内容了。这个功能大受欢迎&#xff01; 这个H5…

大师学SwiftUI第18章Part1 - 图片选择器和相机

如今&#xff0c;个人设备主要用于处理图片、视频和声音&#xff0c;苹果的设备也不例外。SwiftUI可以通过​​Image​​视图显示图片&#xff0c;但需要其它框架的支持来处理图片、在屏幕上展示视频或是播放声音。本章中我们将展示Apple所提供的这类工具。 图片选择器 Swift…

Three.js相机模拟

有没有想过如何在 3D Web 应用程序中模拟物理相机? 在这篇博文中,我将向你展示如何使用 Three.js和 OpenCV 来完成此操作。 我们将从模拟针孔相机模型开始,然后添加真实的镜头畸变。 具体来说,我们将仔细研究 OpenCV 的两个失真模型,并使用后处理着色器复制它们。 拥有逼…

Rockdb简介

背景 最近在使用flink的过程中&#xff0c;由于要存储的状态很大&#xff0c;所以使用到了rockdb作为flink的后端存储&#xff0c;本文就来简单看下rockdb的架构设计 Rockdb设计 Rockdb采用了LSM的结构&#xff0c;它和hbase很像&#xff0c;不过严格的说&#xff0c;基于LS…

高精度算法【Java】(待更新中~)

高进度加法 在Java中可以使用BigInteger进行高精度计算&#xff0c;除此也可以仿照竖式相加的计算原理进行计算。 BigInteger 提供所有 Java 的基本整数操作符的对应物&#xff0c;并提供 java.lang.Math 的所有相关方法。另外&#xff0c;BigInteger 还提供以下运算&#xff1…

11月20日星期一今日早报简报微语报早读

11月20日星期一&#xff0c;农历十月初八&#xff0c;早报微语早读。 1、T1以3-0横扫WBG&#xff0c;拿下S13冠军&#xff01;Faker豪取第4冠&#xff1b; 2、天舟七号货运飞船已运抵文昌发射场&#xff0c;将于明年初发射&#xff1b; 3、“中韩之战”球票已经售罄&#xf…

回归预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测

回归预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测 目录 回归预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测&#xff08;…

JAVA多线程(5)

JAVA多线程(5) 线程安全问题概述 卖票问题分析 单窗口卖票 一个窗口(单线程)卖100张票没有问题 单线程程序是不会出现线程安全问题的 多个窗口卖不同的票 3个窗口一起卖票,卖的票不同,也不会出现问题 多线程程序,没有访问共享数据,不会产生问题 多个窗口卖相同的票 3个窗口…

UI 自动化测试框架设计与 PageObject 改造!

在 UI 自动化测试过程中&#xff0c;面对复杂的业务场景&#xff0c;经常会遇到这样的挑战&#xff1a; 简单的录制/回放速度快&#xff0c;但无法适应复杂场景&#xff1b;编写自动化测试脚本比较灵活&#xff0c;但工作量大且可维护性差&#xff1b;以往的封装技术&#xff…