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

简介: Java零基础入门

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

JAVA.gif

学习目标

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

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

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

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

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


抽象类

抽象类的由来

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

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

抽象类的定义格式

[修饰符]  abstract  class  类名  {    

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

}

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

🍓🍓抽象类的定义举例

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


抽象类的使用

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

抽象类必须有子类,即:每一个抽象类一定要被子类所继承(使用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:类实现多个接口。

interfaceA {  // 定义接口publicstaticfinalStringMSG="MDIT";  // 全局常量publicabstractvoidprint(); // 抽象方法}
interfaceB {  // 定义接口publicabstractvoidget();// 抽象方法}
classXimplementsA, B {  // X类实现了A和B两个接口publicvoidprint() {   // 覆写A接口的抽象方法System.out.println("A接口的抽象方法!");
    }
publicvoidget() { // 覆写B接口的抽象方法System.out.println("B接口的抽象方法!");    }
}
publicclasstext1 {
publicstaticvoidmain(Stringargs[]) {
// 此时X类是A和B两个接口的子类Xx=newX(); // 实例化子类对象x.print();// 调用被覆写过的方法x.get();// 调用被覆写过的方法System.out.println(A.MSG);// 直接访问全局常量    }
}

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

interfaceA {    // 定义接口publicabstractvoidprint(); // 抽象方法}
interfaceB {  // 定义接口publicabstractvoidget(); // 定义抽象方法}
abstractclassC {  // 定义抽象类publicabstractvoidchange();  // 定义抽象方法}
classXextendsCimplementsA, B {  // X类继承了抽象类C,实现了A和B两个接口publicvoidprint() {  // 覆写接口A中的方法System.out.println("A接口的抽象方法!");
    }
publicvoidget() { // 覆写接口B中的方法System.out.println("B接口的抽象方法!");
    }
publicvoidchange() {  // 覆写抽象类C的方法System.out.println("C类的抽象方法!");
    }
}
publicclasstext1 {
publicstaticvoidmain(Stringargs[]) {
// 此时X类是A和B两个接口的子类Xx=newX(); // 实例化子类对象x.print();// 调用被覆写过的方法x.get();// 调用被覆写过的方法    }
}

🍓🍓接口的多继承。

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

interfaceA {    // 定义父接口publicvoidfunA();
}
interfaceB {    // 定义父接口publicvoidfunB();
}
interfaceCextendsA, B {  // 利用extends,实现接口多继承publicvoidfunC();
}
classXimplementsC {  // 实现C接口子类要覆写全部抽象方法publicvoidfunA() {
System.out.println("funa");
    }  // A接口定义的方法publicvoidfunB() {
System.out.println("funb");
    }  // B接口定义的方法publicvoidfunC() {
System.out.println("func");
    }  // C接口定义的方法}
publicclasstext1 {
publicstaticvoidmain(Stringargs[]) {
// 此时X类是A和B两个接口的子类Xx=newX(); // 实例化子类对象x.funA();// 调用被覆写过的方法x.funB();// 调用被覆写过的方法x.funC();// 调用被覆写过的方法    }
}

接口使用时需要注意:

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

抽象类与接口的对比

目录
打赏
0
1
0
0
33
分享
相关文章
Java 基础类从入门到精通实操指南
这份指南专注于**Java 17+**的新特性和基础类库的现代化用法,涵盖开发环境配置、数据类型增强(如文本块)、字符串与集合处理进阶、异常改进(如密封类)、IO操作及实战案例。通过具体代码示例,如CSV数据分析工具,帮助开发者掌握高效编程技巧。同时提供性能优化建议和常用第三方库推荐,适合从入门到精通的Java学习者。资源链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
109 34
2025 年 Java 从入门到精通学习笔记全新版
《Java学习笔记:从入门到精通(2025更新版)》是一本全面覆盖Java开发核心技能的指南,适合零基础到高级开发者。内容包括Java基础(如开发环境配置、核心语法增强)、面向对象编程(密封类、接口增强)、进阶技术(虚拟线程、结构化并发、向量API)、实用类库与框架(HTTP客户端、Spring Boot)、微服务与云原生(容器化、Kubernetes)、响应式编程(Reactor、WebFlux)、函数式编程(Stream API)、测试技术(JUnit 5、Mockito)、数据持久化(JPA、R2DBC)以及实战项目(Todo应用)。
68 5
2025 年 Java 核心技术从入门到精通实战指南
《2025年Java核心技术实战指南》全面覆盖Java开发的最新趋势与最佳实践。内容包括Java新特性(如模式匹配、文本块、记录类)、微服务架构(Spring Boot 3.0+、Spring Cloud)、响应式编程(Reactor、WebFlux)、容器化与云原生(Docker、Kubernetes)、数据访问技术(JPA、R2DBC)、函数式编程、单元测试与集成测试(JUnit 5、Mockito)、性能优化与监控等。通过实战案例,帮助开发者掌握构建高性能、高可用系统的技能。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
111 7
2025 版 Java 学习路线实战指南从入门到精通
《Java学习路线实战指南(2025版)》是一份全面的Java开发学习手册,涵盖基础环境搭建、核心语法与新特性、数据结构与算法、微服务架构、云原生技术栈、AI融合及项目实战。内容包括JDK安装配置、IntelliJ IDEA设置、Records类与模式匹配增强、LeetCode题解、Spring Cloud微服务开发、Kubernetes部署、OpenAI API调用等。结合在线商城系统案例,采用Vue 3、Spring Boot 3.5、MySQL、Elasticsearch等技术,提供从理论到实践的完整路径,助力开发者掌握2025年最新趋势与最佳实践。
137 4
java 入门学习视频_2025 最新 java 入门零基础学习视频教程
《Java 21 入门实操指南(2025年版)》提供了Java最新特性的开发指导。首先介绍了JDK 21和IntelliJ IDEA 2025.1的环境配置,包括环境变量设置和预览功能启用。重点讲解了Java 21三大核心特性:虚拟线程简化高并发编程,Record模式优化数据解构,字符串模板提升字符串拼接可读性。最后通过图书管理系统案例,展示如何运用Record定义实体类、使用Stream API进行数据操作,以及结合字符串模板实现控制台交互。该指南完整呈现了从环境搭建到实际项目开发的Java 21全流程实
42 1
|
17天前
|
Java 抽象类与接口在 Java17 + 开发中的现代应用实践解析
《Java抽象类与接口核心技术解析》 摘要:本文全面剖析Java抽象类与接口的核心概念与技术差异。抽象类通过模板设计实现代码复用,支持具体方法与状态管理;接口则定义行为规范,实现多态支持。文章详细对比了两者在实例化、方法实现、继承机制等方面的区别,并提供了模板方法模式(抽象类)和策略模式(接口)的典型应用示例。特别指出Java8+新特性为接口带来的灵活性提升,包括默认方法和静态方法。最后给出最佳实践建议:优先使用接口定义行为规范,通过抽象类实现代码复用,合理组合两者构建灵活架构。
32 2
Java 从入门到实战完整学习路径与项目实战指南
本文详细介绍了“Java从入门到实战”的学习路径与应用实例,涵盖基础、进阶、框架工具及项目实战四个阶段。内容包括环境搭建、语法基础、面向对象编程,数据结构与算法、多线程并发、JVM原理,以及Spring框架等核心技术。通过学生管理系统、文件下载器和博客系统等实例,帮助读者将理论应用于实践。最后,提供全链路电商系统的开发方案,涉及前后端技术栈与分布式架构。附代码资源链接,助力成为合格的Java开发者。
47 4
|
24天前
|
Java 异步编程难题拆解实操指南:从入门到精通解决异步编程关键问题
本文深入探讨了Java异步编程的实操技巧,基于Project Reactor与Spring WebFlux等技术框架,通过具体案例解决常见难题。内容涵盖反应式编程基础、回调地狱解决方案、并行任务处理、响应式REST API开发、背压策略应用、微服务异步通信及性能监控等方面。结合代码示例,详细讲解了如何构建高性能异步应用,并总结了最佳实践,帮助开发者掌握异步编程的核心技能。适合希望提升异步开发能力的技术人员阅读。
39 3

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等