CUMT-Java复习--抽象类和接口

目录

一、抽象类

1、定义抽象类

2、实现一个抽象类

二、接口

1、定义接口

2、实现接口

3、接口继承 

4、接口和抽象类的相似之处

5、接口和抽象类的区别

三、instanceof关键字


 

一、抽象类

1、定义抽象类

1d31988ccdd54904843fd7c32ab04cc1.png

        抽象类是对于一类相同的具体概念的抽象。

        抽象类和抽象方法都使用“abstract”关键字来修饰。

        抽象类不能被实例化,不能通过构造方法创建实例,只能通过子类创建实例时调用,抽象方法没有方法体。

       抽象方法和抽象类的使用规则:

        一个抽象类可以有多个抽象方法,也可以含有已经实现的方法,但不能通过抽象类调用该方法,有抽象方法的一定是抽象类。

(1)一般来说,实现类继承于抽象类,来实现父类的抽象方法

(2)或者实现类通过接口,实现接口中的抽象方法。

(3)抽象类与其他类的关系在于,抽象类不能创建自己的对象。

        注意:

(1)abstract不能用来修饰变量和构造方法

(2)abstract修饰的方法,只有在重写后才获得意义,抽象方法也不能定义为private,也不能和static、final同时修饰同一方法。

2、实现一个抽象类

(1)抽象类--动物类

public abstract class Animal {
    private String name;
    public Animal(){};
    public Animal(String name)
    {
        this.name=name;
    }
    public String getName()
    {
        return this.name;
    }
    public void setName(String name)
    {
        this.name=name;
    }
    public abstract void action();
    
}

(2)子类--马类

public class Horse extends Animal{
    public Horse (String name)
    {
        super(name);
    }
    public void action()
    {
        System.out.println(this.getName()+"在奔跑");
    }
}

        子类继承抽象类,要用extends连接父类

        子类的构造方法,如果调用父类的方法,则使用super(局部变量) 

(3)子类--鸟类

public class Bird extends Animal{
    public Bird(String name)
    {
        super(name);
    }
    public void action()
    {
        System.out.println(this.getName()+"在飞翔");
    } 
}

(4)测试类

public class Test {
   public static void main(String[] args)
   {
        Animal a;
        a=new Horse("马");   //马的实例
        a.action();          
        a=new Bird("鸟");    //鸟的实例
        a.action();
   } 
}

        注意!抽象类变量可以指向其子类,但不能实例化一个抽象类 

        输出:

马在奔跑

鸟在飞翔

二、接口

        由于Java只支持单一继承,不支持多重继承,即一个类只能继承一个父类,这一缺陷可以通过接口来弥补,所以Java允许一个类实现多个接口

1、定义接口

bd78f4d4226c4979ade4e8dbbc55bb48.png

        接口的访问符可以是public或者缺省(缺省代表权限范围为当前包),一个接口可以继承多个父接口,但接口只能继承接口,不能继承类。

        接口内可以包含静态常量、抽象方法、内部类、内部接口以及枚举,在Java8 之后可以定义默认方法,类方法。

        接口内的常量、方法默认为public,成员属性默认为public static final(全局静态常量)

2、实现接口

        接口不可以直接实例化,但可以通过使用实现类实现接口,关键字为implements,注意s。一个类可以实现若干接口,用逗号隔开,这个类也要同时实现若干接口的所有抽象方法,否则该类应被定义为抽象类,实现抽象方法是需要重写方法,添加@override

        当一个类实现某个接口时,该类也将获得接口中定义的常量、方法。

(1)接口类--Animal类

public interface Animal {
   public int MAX=100;
   public void makeSound(); 
}

(2)实现类--Dog类

public class Dog implements Animal{
    @Override
    public void makeSound()
    {
        System.out.println("Woof!");
    }
}

(3)测试类--Test类

public class Test {
   public static void main(String[] args) 
   {
        Dog gauss = new Dog();   //也可以写作Animal gauss = new Dog();
        System.out.println("The Dog`s speed: "+gauss.MAX);
        gauss.makeSound();
        
   }
}

        在输出接口类中的常量时,可以用"类名.常量" 或 "对象名.常量"。

        接口可以指向类的实例对象,这也是多态的一种体现,也就是上面的Animal gauss = new Dog()。

        输出:

 

The Dog`s speed: 100

Woof!

3、接口继承 

         接口继承可以支持多继承,并且可以获得父接口定义的所有抽象方法和常量。

        一个接口继承多个接口时,多个接口跟在extends关键字后,并使用“,”进行间隔。

(1)接口及其实现类

        这里通过省略public,省略访问符的形式,可以在同一个文件下写多个接口,但坏处在于访问限制为当前包。

        下面接口IntefaceC继承于InterfaceA和InterfaceB两个接口,并通过Demo类实现InterfaceC的接口。

interface InterfaceA {
    int valueA = 10;
    void testA();
    
}
interface InterfaceB
{
    int valueB = 20;
    void testB();
}   
interface InterfaceC extends InterfaceA,InterfaceB
{
    int valueC = 30;
    void testC();
}
public class Demo implements InterfaceC
{
    public void testA()
    {
        System.out.println("这是testA方法,valueA: "+valueA);
    } 
    public void testB()
    {
        System.out.println("这是testB方法,valueB: "+valueB);
    } 
    public void testC()
    {
        System.out.println("这是testC方法,valueC: "+valueC);
    } 
}

(2)测试类

        首先通过接口直接调用接口中定义的常量,另外通过接口实现类调用接口中定义的常量。

public class Test {
   public static void main(String[] args)
   {
        System.out.println("通过接口调用,valueA: "+InterfaceA.valueA);
        InterfaceC ic = new Demo();
        ic.testA();
        ic.testB();
   } 
}

        输出: 

通过接口调用,valueA: 10

这是testA方法,valueA: 10

这是testB方法,valueB: 20

4、接口和抽象类的相似之处

(1)接口和抽象类都不能被实例化,需要被其他类实现或继承

(2)接口和抽象类的类型变量都可以指向其实现类或子类的实例对象

(3)接口和抽象类都包含抽象方法,实现接口和继承抽象类都需要实现其抽象方法。

5、接口和抽象类的区别

        主要区别体现在设计目的上:

(1)接口是一种规范,类似一种总纲,是系统都应遵循的标准,来实现各模块的耦合和通信

(2)抽象类体现一种模块化设计,一般作为系统实现中的中间产品,需要进一步的完善。

        其他区别:

(1) 接口不能为普通方法提供方法实现,抽象类可以为普通方法提供方法实现。

(2)接口定义变量默认为public static final,必须赋予初值,实现类不能重定义,抽象类的变量可以在普通类中重新定义。

(3)接口中定义方法默认时是public限定,抽象类定义方法默认是缺省的。

(4)接口不包括构造方法,抽象类包括构造方法。

(5)一个类只能继承一个父类,但一个类可以实现多个接口,接口也可以实现多个接口。

三、instanceof关键字

        语法: 子类 instanceof 父类

        上面语句返回该子类是否继承于父类,是则返回true,否则返回false,用于判断继承关系。

 

参考书籍:《Java 8 基础应用与开发》QST青软实训编

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

密码强度的提升与网络安全意识

随着互联网的快速发展,网络安全问题日益突出,其中密码安全作为网络世界的第一道防线,其重要性不言而喻。本文将从密码强度的提升和网络安全意识普及两个方面,探讨如何在日益复杂的网络环境中保障个人信息安全。 随机密码生成器 |…

【2023 英特尔On技术创新大会直播 |我与英特尔的初次相遇】—— AIPC探索下一代的物联网时代

🌈个人主页: Aileen_0v0 🔥系列专栏:英特尔技术学习专栏 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 硅谷经济的发展与挑战 Intel开发者云与AI技术的应用 AI压缩技术的发展与应用 英特尔与阿里巴巴在AI领域的合作 AIPC时代的…

RocketMQ系统性学习-RocketMQ原理分析之消息的可靠性以及有序性如何保证

文章目录 消息的可靠性如何保证?消息的有序性如何保证? 消息的可靠性如何保证? 要保证消息的可靠性,先来思考一下从哪些方面保证呢? 这要看消息的生命周期,既然保证可靠性,那么就是要保证 A 发…

理解并在虚拟化策略中实施 QEMU

● QEMU 是一种流行的开源机器模拟器。 ● QEMU 支持硬件虚拟化扩展(Intel VT-x 和 AMD-V)。 ● QEMUCare 为基于 QEMU 的虚拟化系统提供实时修补解决方案。 虚拟化现已成为现代 IT 基础设施的支柱,使组织能够实现前所未有的灵活性、可扩展…

pycharm运行正常,但命令行执行提示module不存在的多种解决方式

问题描述 在执行某个测试模块时出现提示,显示自定义模块data不存在,但是在PyCharm下运行正常。错误信息如下: Traceback (most recent call last):File "/run/channelnterface-autocase/testcases/test_chanel_detail.py", line 2…

直播种类之VR全景直播

VR全景直播是一种结合虚拟现实技术和直播的全新体验。通过全景相机拍摄,观众可以身临其境地感受直播现场的氛围和真实感,提供逼真的观看体验。 VR全景直播的优势在于: 1.身临其境的观看体验:观众可以像真的在现场一样,通过虚拟现实设备探索…

基于python的leetcode算法介绍之递归

文章目录 零 算法介绍一 简单示例 辗转相除法Leetcode例题与思路[509. 斐波那契数](https://leetcode.cn/problems/fibonacci-number/)解题思路:题解: [206. 反转链表](https://leetcode.cn/problems/reverse-linked-list/)解题思路:题解&…

OpenHarmony开发环境快速搭建(无需命令行)

一. 搭建Windows环境 在嵌入式开发中,很多开发者习惯于使用Windows进行代码的编辑,比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段,大部分的开发板源码还不支持在Windows环境下进行编译,如Hi3861、H…

数字助听器如何处理声音?

数字助听器如何处理声音? 助听器的作用不仅仅是放大声音。为了创建可改进语音识别的自定义声音配置文件,他们以多种方式处理声音。 麦克风 与人耳一样,数字助听器不直接处理声波。首先是麦克风。它们充当换能器,捕获机械波能并将…

Verilog 仿真可视化

Verilog 仿真可视化 飞多学堂 飞多学堂 2023-12-11 09:37 Posted on 山东 DigitalJS 是一个基于 JavaScript 实现的开源数字电路模拟器,旨在模拟由硬件设计工具(如 Yosys)合成的电路。由弗罗茨瓦夫大学的Marek Materzok开发,源文…

手机数码品牌网站建设的作用是什么

手机数码产品几乎已经成为成年人必备的,包括手机、电脑、摄像机、键盘配件等,同时市场中相关企业也非常多,消费者可供选择的商品类型也很多样,而对企业来讲,只有不断提升品牌形象、获客拉新等才能不断提升企业地位&…

easyexcel常见注解

easyexcel常见注解 一、依赖 <!--阿里巴巴EasyExcel依赖--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.10</version></dependency>二、常见注解 ExcelProperty 注解中…

绝地求生什么游戏?

绝地求生是一款由蓝洞公司开发并发行的多人在线生存竞技游戏&#xff0c;也是一款备受玩家热爱和追捧的射击游戏。游戏灵感源自于日本电影《葛洛历亚号》&#xff0c;玩家将扮演一名跳伞降落在荒岛上的幸存者&#xff0c;通过收集资源、与其他玩家进行战斗来生存到最后一名&…

FastApi-快速入门FastApi框架(1)

前言 本文是该专栏的第1篇&#xff0c;后面会持续分享FastApi以及项目实战的各种干货知识&#xff0c;值得关注。 FastApi是一个现代、快速&#xff08;高性能&#xff09;的基于Python3.6的web框架&#xff0c;用于构建API。它旨在使API开发更快&#xff0c;更简单&#xff0…

Polar 这又是一个上传

Polar 这又是一个上传 开局还是一个文件上传界面 有前端后缀检查&#xff0c;这个好绕&#xff0c;抓包改后缀就行 绕过后burp可以直接传一个php上去 getshell 但是无法cat flag&#xff0c;感觉权限不够&#xff0c;需要提权。 查找具有suid权限的命令 1system(find / -use…

网络协议小记

一、TCP/IP协议 作为一个小萌新&#xff0c;当然我无法将tcp/ip协议的大部分江山和盘托出&#xff0c;但是其中很多面试可能问到的知识&#xff0c;我觉得有必要总结一下&#xff01; 首先&#xff0c;在学习tcp/ip协议之前&#xff0c;我们必须搞明白什么是tcp/ip协议。 1、…

第二十一章 : Spring Boot 集成定时任务(一)

第二十一章 &#xff1a; Spring Boot 集成定时任务&#xff08;一&#xff09; 前言 本章知识点&#xff1a; 介绍使用Spring Boot内置的Scheduled注解来实现定时任务-单线程和多线程&#xff1b;以及介绍Quartz定时任务调度框架&#xff1a;简单定时调度器&#xff08;Simp…

SpringIOC之AnnotatedElementKey

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

【网络安全】—计算机网络基础

文章目录 网络必备基础物理层数据链路层与交换机网络模型OSI/TCP对等传输虚拟局域网VLAN静态路由与配置网络地址转换NAT访问控制列表ACLIP协议与IP地址分类子网掩码网关子网划分总结 计算机网络是指将地理位置不同的、功能独立的多台计算机通过通信线路连接起来&#xff0c;以功…

部署智能合约以及 javascript 调用合约函数(Web3项目二实战之三)

在上一篇 智能合约是Web3项目的核心要务(Web3项目二实战之二) ,我们已然为项目编写了智能合约,在攥写完智能合约后,该项目将完成了一大部分,剩下无非就是用户界面交互的内容。 然而,在码完了智能合约代码后,起着承前启后关键性的便是,前端界面与智能合约的交互。 智能…