【Java语言】抽象类与接口

devtools/2024/11/7 22:47:23/

抽象类

抽象类:一个类中没有包含详细的信息来描述一个对象,一般抽象类都是父类而且没有描述一个具体的对象。举一个例子吧:

       父类Animal中的back方法好像并没有什么实际工作,都是由 Animal的各种子类的back方法来完成的,像这种没有实际工作的方法,我们可以把它设计成一个抽象方法,包含抽象方法的类我们称为抽象类.

抽象类的语法

在Java中,被abstract修饰的类叫抽象类,在抽象类中被abstract修饰的方法叫抽象方法,抽象方法不需要写具体的代码。而且抽象类也可以写属性、普通方法和构造方法

抽象类的特性 

  • 抽象类不能实例化对象,所以它的存在就是为了被继承;

  • 如果一个类中含有抽象方法那么这个类一定是抽象类,但是抽象类中不一定有抽象方法 ;

  • 普通类继承抽象类后,一定需要重写抽象类中的所有抽象方法;

  • 抽象方法不能被final、static修饰(不能被重写),也不能被private修饰(重写需要权限更高的); 
  • 如果普通类C继承了抽象类B,抽象类B又继承了父类抽象类A,那么C既要继承父类又要继承父类的父类; 

抽象类的作用 

       抽象类不实现任何工作,都是子类在完成,那么它和普通的父类有什么区别呢?其实抽象类就是为了预防错误,不让抽象类实例化对象,方便我们尽早发现问题所在。就像final一样,它的存在就是让变量成为常量不被改变。

接口

接口:在Java中,接口可以看成多个类的公共规范,是一种引用数据类型。 

接口的语法

       需要使用interface来定义一个接口, 其实也就是把class换成了它。而且在接口当中,成员变量默认是public static final、成员方法默认是public abstract,所以一般情况下都不写。接口当中没有普通方法

接口的使用 

       接口不能直接使用,必须有一个实现类来实现该接口,而且必须实现接口的所有抽象方法。子类和父类的继承关系用extends,类和接口的实现关系用implements。

接口的特性

  • 接口当中定义default、static方法是可以有具体的实现;

  • 接口不能实例化对象;

  • 接口也可以发生向上转型和动态绑定;
  • 当一个类实现接口中的方法后,当前类中的方法不能加public;
  • 接口中不能有构造方法和代码块;

  • 一个类可以产生一个独立字节码(.class)文件,一个接口也可以;

实现多个接口

       在Java中,继承不能是多继承(就是一个类只能继承一个父类,不能多继承父类),但是在接口中可以实现多接口(即一个类可以实现多个接口),实现多接口的话就需要把所有接口中的所有抽象方法都重写一遍。 而且也可以这样写一个类继承一个父类又实现多个接口

接口间的继承

       类与类之间单继承,接口之间可以实现多继承(即使就是一个接口可以继承多个父类的接口),也是用extends关键字来实现。 如果实现ISwimming接口的话需要重写该接口即父类接口的所有接口方法。

object类

       这里使用了object类,object是所有类的祖先,所以有时候就会发生向上转型,就像下面的equals方法一样,下面的equal是想要判断两个是否相等,如果根据原来的equal方法是没有办法判断下面两个对象是否相等的,所以需要我们重新写equal方法(父类和子类有重名的方法时调用子类的方法)。

import java.util.Arrays;
//类实现接口Comparable(包里就有的接口),而这个接口编程调用compareTo方法
class Clothes implements Comparable{public String name;public int money;public Clothes(String name, int money) {this.name = name;this.money = money;}@Overridepublic String toString() {return "Clothes{" +"money=" + money +", name='" + name + '\'' +'}';}//需要重写方法实现排序public int compareTo(Object o) {Clothes s = (Clothes) o;if (this.money > s.money) {return -1;} else if (this.money < s.money) {return 1;} else {return 0;}}
}public class Test1 {public static void sort(Comparable[] array) {for (int i = 0; i < array.length; i++) {for (int j = array.length - 1; j > i; j--) {if (array[j - 1].compareTo(array[j]) < 0) {//交换两个对象的下标位置Comparable tmp = array[j - 1];array[j - 1] = array[j];array[j] = tmp;}}}}public static void main(String[] args) {Clothes[] clothes = new Clothes[]{new Clothes("上衣", 40),new Clothes("裤子", 80),new Clothes("袜子", 10),};sort(clothes);//先排序再打印System.out.println(Arrays.toString(clothes));}
}

Clonable接口和深拷贝

Object 类中存在一个clone方法, 调用这个方法可以拷贝一个对象。但是要想合法调用 clone 方法, 必须要先实现 Clonable 接口, 否则就会出现异常。

“浅拷贝”

“浅拷贝”就是拷贝引用对象最近一层的对象拷贝,就比如在一个栈中开辟了一块空间,这个空间指向了一个堆区的对象A,然后这个对象有指向了一个对象B,“浅拷贝”就是把A的空间在堆区拷贝了一份,拷贝的地址改变了,但是里面的内容不变,所以它指向的还是对象B。

“深拷贝” 

“深拷贝”就是将对象A、对象B都拷贝一份,B是深入的对象。这样下来就可以改变对象B中变量的值。

抽象类与接口的区别


http://www.ppmy.cn/devtools/132143.html

相关文章

CSS中常见的两列布局、三列布局、百分比和多行多列布局!

目录 一、两列布局 1、前言&#xff1a; 2. 两列布局的常见用法 两列布局的元素示例&#xff1a; 代码运行后如下&#xff1a; 二、三列布局 1.前言 2. 三列布局的常见用法 三列布局的元素示例&#xff1a; 代码运行后如下&#xff1a; 三、多行多列 1.前言 2&…

【5.9】指针算法-双指针解验证回文字符串 Ⅱ

一、题目 给定一个非空字符串s&#xff0c; 最多删除一个字符 。判断是否能成为回文字符串。 示例 1: 输入: s "aba " 输出: true 示例 2: 输入: s "abca" 输出: true 解释: 你可以删除c字符。 示例 3: 输入: s "abc" 输出: false 提示: 1 &l…

基于python主观题自动阅卷系统毕业设计项目

基于python主观题自动阅卷系统毕业设计项目 大家好&#xff0c;我是陈辰学长&#xff0c;一名在 Java 圈辛勤劳作的码农。今日&#xff0c;要和大家分享的是一款基于python主观题自动阅卷系统毕业设计。项目源码以及部署相关事宜&#xff0c;请联系陈辰学长&#xff0c;文末会…

stm32不小心把SWD和JTAG都给关了,程序下载不进去,怎么办?

因为想用STM32F103的PA15引脚&#xff0c;调试程序的时候不小心把SWD和JTAD接口都给关了&#xff0c;先看下罪魁祸首 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//关掉JTAG&#xff0c;不关SWGPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//关掉SW&am…

想转行网络安全,可以先看看过来人的建议

在当前就业形势下&#xff0c;不少朋友面临转行的困境。网络安全作为一个热门领域&#xff0c;自然也吸引了许多人的目光。本文将就转行网络安全这一话题&#xff0c;提供一些切实可行的建议。 网络安全行业概况 网络安全涵盖了从基础的脚本编写到高级的漏洞研究等多个层面。…

在Rocky Linux 9上部署NFS服务并对其进行权限配额管理以及监控

NFS&#xff08;Network File System&#xff09;是一种分布式文件系统协议&#xff0c;最初由Sun Microsystems公司开发&#xff0c;用于在不同计算机之间通过网络共享文件。NFS允许客户端访问位于服务器上的文件&#xff0c;就像这些文件存储在本地一样。它通常用于Unix和类U…

蓝桥杯-网络安全比赛题目-遗漏的压缩包

小蓝同学给你发来了他自己开发的网站链接&#xff0c; 他说他故意留下了一个压缩包文件&#xff0c;里面有网站的源代码&#xff0c; 他想考验一下你的网络安全技能。 &#xff08;点击“下发赛题”后&#xff0c;你将得到一个http链接。如果该链接自动跳转到https&#xff0c;…

基于SSM(Spring + Spring MVC + MyBatis)框架的咖啡馆管理系统

基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架的咖啡馆管理系统是一个综合性的Web应用程序&#xff0c;用于管理和优化咖啡馆的运营。下面我将提供一个详细的案例程序概述&#xff0c;包括主要的功能模块和技术栈介绍。 项目概述 功能需求 用户管理&…