【Java零基础入门篇】第 ⑤ 期 - 抽象类和接口(一)

news2024/11/23 13:47:50

博主:命运之光
专栏:JAVA入门

 

学习目标

1.了解什么是抽象类,什么是接口;

2.掌握抽象类和接口的定义方法;

3.理解接口和抽象类的使用场景;

4.掌握多态的含义和用法;

5.掌握内部类的定义方法和使用方法;

目录

抽象类

抽象类的由来

抽象类的定义格式

抽象类的使用

使用抽象类的目的

注意事项

对象的多态性——向上转型

向下转型

接 口

接口概述

接口的定义

接口的实现

抽象类与接口的对比


抽象类

抽象类的由来

随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征

  • 将一个父类设计得非常抽象,以至于它没有具体的实例(对象),这样的类叫做抽象类
  • 即定义一个方法,却不明确方法具体如何实现时,可以将方法定义为抽象方法含有抽象方法的类就定义成抽象类

抽象类的定义格式

[修饰符] abstract class 类名 {

【修饰符】 abstract 返回值类型 方法名(【参数列表】); //抽象方法 ………..

}

  • 抽象方法指的是没有方法体的方法;
  • 抽象方法必须使用abstract关键字进行定义;
  • 拥有抽象方法的类一定属于抽象类;
  • 抽象类要使用abstract声明。

🍓🍓抽象类的定义举例

abstract class A { 		// 定义一个抽象类,使用abstract声明
	public void fun() { 		// 普通方法
		System.out.println(“存在有方法体的普通方法!");
	}
	// 此方法并没有方法体的声明,并且存在有abstract关键字,表示抽象方法
	public abstract void print();
}

抽象类的使用

抽象类定义好,但是如果要想使用抽象类则必须遵守如下原则:

抽象类必须有子类,即:每一个抽象类一定要被子类所继承(使用extends关键字),但是在Java中每一个子类只能够继承一个抽象类,所以具备有单继承局限;

②抽象类的子类(子类不是抽象类必须覆写抽象类之中的全部抽象方法(强制子类覆写);

③可以通过抽象类的子类完成抽象类的实例化对象操作。

使用抽象类的目的

  • 可以把子类共有部分抽取出来,并且实现所能实现的部分,从而为子类提供继承
  • 不必实现所有的方法,对于那些只需知道行为是什么,不用知道具体怎么做的方法,可以只给出说明,即定义成抽象的,而把具体的实现交给子类去做。

把那些共有的、但不能具体实现的行为抽出来,定义成抽象的方法,作用有两点:

  • 一、为子类规定了统一的规范;
  • 二、实现了多态性。

注意事项

①抽象类可以包含抽象方法,也可以不包含抽象方法。但是包含抽象方法的类必须定义抽象类

②抽象类不能被实例化,抽象类可以被继承,所以不允许定义成final类

③抽象类中一定有构造器,便于子类实例化时调用。

④抽象方法只有方法的声明没有方法体

继承抽象类的类必须实现抽象类的所有抽象方法,否则,也必须定义成抽象类

⑥若子类重写了父类中的所有抽象方法后,此子类才可以实例化

对象的多态性——向上转型

向上转型: 是指把一个子类的对象转成一个父类的对象。

语法格式:父类名称 对象名 = new 子类名称()

右侧创建一个子类对象,把它当作父类来看待使用。

注意:向上转型一定是安全的,没有问题的,但是也存在弊端。一旦向上转型为父类,那么就无法调用子类原本的独有方法。

向下转型

向下转型是把一个父类对象转到一个子类对象(还原)。

语法格式:子类型名称 对象名 =(子类名称父类对象;

将父类对象,(还原)成为本来的子类对象

注意:向下转型需要强制烈性转换,不一定安全,不推荐使用,除非明确知道被转换对象的实际类型是什么,能够确保转换正确才行。

接 口

接口概述

日常生活中,两个实体之间进行连接的部分称为接口。如电脑和U盘连接的标准USB接口。接口可以确保不同实体之间的顺利连接。如不同厂家和U盘厂家只要按照相同的USB接口进行生产,那么所有的电脑和U盘就可以顺利的连接起来。

  • 有时必须从几个类中抽取出一些共同的行为特征,而它们之间又没有继承的关系,仅仅是具有相同的行为特征而已。例如:鼠标、键盘、打印机、扫描仪、摄像头、充电器、MP3机、手机、数码相机、移动硬盘等都支持USB连接
  • 接口指明了一个类必须要做什么和不能做什么,相当于类的蓝图。一个接口就是描述一种能力,作用就是告诉类,要实现这种接口代表的功能,就必须实现某些方法,才能确定类拥有该接口代表的某种能力。
  • 有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是,Java不支持多重继承有了接口,就可以得到多重继承的效果

接口的定义

🍓🍓所谓的接口严格来讲就属于一个特殊的类,而且这个类里面只有抽象方法与静态常量(JDK1.8之前版本的定义

接口的定义格式为:

[public] interface 接口名 {

static final 类型名 常量名; //常量列表

public abstract 类型名 方法名(【参数列表】); //抽象方法列表

}

接口的定义跟类相似,只能定义成public权限或者默认权限。接口里的变量和方法都是公有的,即只能是public权限,但public可以省略。

接口的实现

接口使用规则

由于接口中存在抽象方法,所有接口对象不可能直接使用关键字new进行实例化操作。

  • 接口必须要有子类(实现类,此时一个实现类可以使用implements关键字实现多个接口,避免了单继承局限
  • 接口的子类(如果不是抽象类),必须要覆写接口中的全部抽象方法
  • 创建实现类的对象,进行使用。

格式如下:

[ 类修饰符] class 类名 [ extends 父类名 ] [ implements 接口名列表 ] {

成员变量定义;

成员方法定义;

}

🍓🍓例1:类实现多个接口。

interface A { 	// 定义接口
    public static final String MSG = "MDIT"; 	// 全局常量
    public abstract void print(); // 抽象方法
}
interface B {		// 定义接口
    public abstract void get();// 抽象方法
}
class X implements A, B { 	// X类实现了A和B两个接口
    public void print() {	// 覆写A接口的抽象方法
        System.out.println("A接口的抽象方法!");
    }
    public void get() {	// 覆写B接口的抽象方法
        System.out.println("B接口的抽象方法!");	}
}
public class text1 {
    public static void main(String args[]) {
        // 此时X类是A和B两个接口的子类
        X x = new X(); // 实例化子类对象
        x.print();// 调用被覆写过的方法
        x.get();// 调用被覆写过的方法
        System.out.println(A.MSG);// 直接访问全局常量
    }
}

🍓🍓例2:子类继承抽象类同时实现接口。

interface A { 			// 定义接口
    public abstract void print(); // 抽象方法
}
interface B {		// 定义接口
    public abstract void get();	// 定义抽象方法
}
abstract class C {	// 定义抽象类
    public abstract void change();	// 定义抽象方法
}
class X extends C implements A, B { 	// X类继承了抽象类C,实现了A和B两个接口
    public void print() {		// 覆写接口A中的方法
        System.out.println("A接口的抽象方法!");
    }
    public void get() {	// 覆写接口B中的方法
        System.out.println("B接口的抽象方法!");
    }
    public void change() {	// 覆写抽象类C的方法
        System.out.println("C类的抽象方法!");
    }
}
public class text1 {
    public static void main(String args[]) {
        // 此时X类是A和B两个接口的子类
        X x = new X(); // 实例化子类对象
        x.print();// 调用被覆写过的方法
        x.get();// 调用被覆写过的方法
    }
}

🍓🍓接口的多继承。

一个类只能继承另外一个类,但一个接口可以同时继承多个接口,多个接口之间用英文逗号分隔开。

interface A {				// 定义父接口
    public void funA();
}
interface B {				// 定义父接口
    public void funB();
}
interface C extends A, B {	// 利用extends,实现接口多继承
    public void funC();
}
class X implements C {		// 实现C接口子类要覆写全部抽象方法
    public void funA() {
        System.out.println("funa");
    }		// A接口定义的方法
    public void funB() {
        System.out.println("funb");
    }		// B接口定义的方法
    public void funC() {
        System.out.println("func");
    }		// C接口定义的方法
}
public class text1 {
    public static void main(String args[]) {
        // 此时X类是A和B两个接口的子类
        X x = new X(); // 实例化子类对象
        x.funA();// 调用被覆写过的方法
        x.funB();// 调用被覆写过的方法
        x.funC();// 调用被覆写过的方法
    }
}

接口使用时需要注意:

  • 接口是系统中最高层次的抽象类型;
  • 接口本身必须十分稳定,接口一旦定制,就不允许随意修改,否则对接口实现类以及接口访问都会造成影响。

抽象类与接口的对比

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字孪生应用 | 3D可视化技术助力智慧煤矿建设,提升煤矿生产效率

智慧煤矿数字孪生可视化平台是一种利用现代信息技术手段,对煤矿的生产过程进行实时监测、管理和控制的系统。它能够将煤矿内的数据、信息、图像等多种信息整合在一起,通过3D可视化的方式呈现给煤矿管理者和工作人员,帮助他们更好地了解煤矿的…

mysql读写分离实验

amoeba服务器 mkder amoeba tar xf amoba- mysql-binary-2. 2.0.tar.gz -C amoeba mv amoeba /usr/local 解压jdk mv jdk1.6 /usr/local/jdk1.6 vim /etc/profile export JAVA_home/usr/local/jdk1.6 export CLASSPATH.:$JAVA_HOME/lib:$JAVE_HOME/jre/lib export AM…

SpringBoot+myBatis(plus)+MySQL+VUE最基础简易的前后端全栈demo制作

网站全栈制作: 一:后端 为了跟公司后端更好的扯皮(不是),本人决定学一下java语言的后端接口书写。 项目制作:后端采用SpringBootmyBatis(plus)mysql(IDE为IDEA软件)。前端采用Vue…

奶爸式Swagger教学

目录 一、导入依赖 二、SwaggerConfig基础编程 三、Swagger 常用说明注解 1.API 2.ApiOperation 3.ApiModel 4.ApiModelProperty 5.ApiParam 6.ApilmplicitParam 一、导入依赖 <!--开启Swagger --><!-- https://mvnrepository.com/artifact/io.springf…

自动化测试框架搭建步骤教程

说起自动化测试&#xff0c;我想大家都会有个疑问&#xff0c;要不要做自动化测试&#xff1f; 自动化测试给我们带来的收益是否会超出在建设时所投入的成本&#xff0c;这个嘛别说是我&#xff0c;即便是高手也很难回答&#xff0c;自动化测试的初衷是美好的&#xff0c;而测试…

实验1 流水线及流水线中的冲突【计算机系统结构】

实验1 流水线及流水线中的冲突【计算机系统结构】 前言推荐实验1 流水线及流水线中的冲突1 实验目的2 实验平台3 实验内容和步骤4 实验结论5 实验心得 最后 前言 2023-5-12 20:22:09 以下内容源自《【计算机系统结构】》 仅供学习交流使用 推荐 无 实验1 流水线及流水线中…

【国际知名-hacker`动态`】洞悉-最新 hacker技术 新闻

国际知名-黑客动态 1、【导读】黑客 最新 技术&新闻 平台 2、【动态】每日必看的朋友圈 3、【多看看】跳出舒适圈&#xff0c;你要学的还有很多 ​ The Hacker News 报道黑客攻击、网络安全、科技新闻&#xff08;内容深入浅出>提供及时、可靠的信息) 链接&#xff1a…

面板数据的门槛|门限效应检验、阈值确定、回归结果解释

写在前面 up学习是参照一个B站大美女&#xff1a;传送门 这里做笔记总结&#xff0c;勿cue 1.为什么是门槛模型 这玩意是针对非线性的举个例子 打LOL&#xff0c;最开始接触的时候&#xff0c;是新手训练营&#xff0c;你需要画大量的时间去学习如何行走、控制角色、熟悉英雄…

使用 Selenium IDE 上手 web 自动化测试

安装 Selenium IDE 是以浏览器插件的形式使用的&#xff0c;主要包含 FireFox 和 Chrome 两种。安装方式分为&#xff1a; 在线安装&#xff1a;下载对应的浏览器插件&#xff08;chrome)。本地安装&#xff1a;把 .zip 压缩包拖到浏览器的扩展页面。 开始页面 在浏览器的插…

patchelf 和 glibc-all-in-one

小白垃圾笔记。不建议阅读。 为什么突然学这个呢&#xff1f; 因为因为因为一个栈溢出题&#xff0c;把我的ubuntu16搞崩了。具体是什么原因呢。 我很菜&#xff0c;我不知道pip是干啥的&#xff0c;之前装pwntools都是直接粘贴命令。然而这次&#xff0c;ubuntu16的python其…

冠珠瓷砖打造民族文化品牌,让中国陶成为中国潮

随着国家经济实力、综合国力的大幅度提升&#xff0c;文化自信被强势唤醒&#xff0c;“国潮”之风蔚然复兴。“讲好中国故事、传递中国文化”&#xff0c;成为民族品牌共同的愿景。冠珠瓷砖在建立之初就立足于民族品牌的打造&#xff0c;致力于“砖筑中国瓷砖硬实力”&#xf…

RFID技术在家具行业的应用

RFID技术在家具行业的应用 科技的不断进步和发展&#xff0c;RFID技术在各个领域的应用也越来越广泛&#xff0c;其中家具行业也不例外。RFID技术可以帮助家具企业实现实时追踪、管理和监控家具的生产、物流、库存以及售后服务等全流程&#xff0c;提高家具企业的生产效率和管…

算法修炼之练气篇——练气九层

博主&#xff1a;命运之光 专栏&#xff1a;算法修炼之练气篇 前言&#xff1a;每天练习五道题&#xff0c;炼气篇大概会练习200道题左右&#xff0c;题目有C语言网上的题&#xff0c;也有洛谷上面的题&#xff0c;题目简单适合新手入门。&#xff08;代码都是命运之光自己写的…

hexo + github 创建个人博客网站

环境准备 nodejs 和 npmgit 安装hexo hexo 是一个静态博客生成网站&#xff0c;可以快速制作自己的博客网站并部署 安装hexo npm install hexo-cli -g 创建项目 hexo init 本地预览 hexo s 部署到github page 新建仓库 创建一个名为[用户名].github.io的仓库 下载自动部署插…

三本毕业,银行外包测试工作 4 个月有余.....

本人普通三本本科毕业 4 年&#xff0c;目前是在广州工作&#xff0c;是一家大型的人力外包公司外包到银行的测试人员&#xff0c;这可能也是长期在各大招聘软件上最积极的招聘岗位。 从入职到现在已经有四个月了&#xff0c;也大概了解了外包的主要工作情况&#xff0c;也有了…

Android 性能优化的真谛,你领悟到了吗?

当今移动应用已经成为人们生活中不可或缺的一部分&#xff0c;而Android平台也是最受欢迎的移动操作系统之一。但是&#xff0c;由于Android平台的开放性和多样性&#xff0c;开发者需要特别注意应用的性能问题。本文将介绍一些Android性能优化的方法&#xff0c;帮助开发者提高…

六年间全球十大勒索攻击事件盘点:没有底线全是算计

自2017年WannaCry席卷全球以来&#xff0c;勒索软件攻击不断演变&#xff0c;并逐渐形成产业化&#xff0c;其攻击规模、影响及破坏效果进一步扩大&#xff0c;已经对全球制造、金融、能源、医疗、政府组织等关键领域造成严重影响&#xff0c;在某些事件中&#xff0c;攻击者挟…

家用洗地机哪种好?入门级智能洗地机推荐

传统的清洁方式不仅费时费力&#xff0c;而且并不一定能够完全清除地面污渍&#xff0c;而洗地机采用的高效吸力和滚刷设计可以快速、彻底地清洁地面&#xff0c;让您轻松应对日常清洁问题。洗地机是一种非常经济实用的清洁设备&#xff0c;它能够深入清洁地面&#xff0c;有效…

深度指南:WhatsApp广播vs WhatsApp群组

WhatsApp是全球使用最广泛的通信应用程序之一。您可以在您的应用程序上找到WhatsApp群组和WhatsApp广播功能&#xff0c;据我所知&#xff0c;SaleSmartly&#xff08;ss客服&#xff09;支持集成WhatsApp并实现群组与广播功能。那么&#xff0c;二者之间有什么区别&#xff1f…

Windows下git和github的使用

介绍windows下的git和GitHub使用。 一、注册gihub账号 github官网&#xff1a;https://github.com 自行创建即可。 登录&#xff0c;create repository新建仓库一个测试库readme&#xff0c;创建完成。 二、git的安装 git官方网站&#xff1a;https://git-scm.com/ 选择Wi…