抽象类(HNU-面向对象程序设计)

抽象类

一种不能被实例化的类,目的是为了让其他类继承它,并在子类中完善它的抽象方法。我们使用 abstract 关键字来定义抽象类,同时它可以包含抽象方法和普通方法。

例子:

abstract class Shape {// 抽象方法,没有实现abstract void draw();// 普通方法,有具体实现void display() {System.out.println("This is a shape.");}
}

在这个例子中,Shape 是一个抽象类,它包含了一个抽象方法 draw 和一个普通方法 display。抽象方法没有实际的实现,而是在子类中被具体实现。

当我们要创建一个实际的形状类时,我们可以继承抽象类并实现它的抽象方法,比如:

class Circle extends Shape {void draw() {System.out.println("Drawing a circle.");}
}

接口:

接口定义了一组方法,但没有提供这些方法的具体实现。类通过实现(implements)接口来承诺提供这些方法的具体实现。让我们看一个简单的例子:

// 定义一个简单的接口
interface Eater {void eat();
}// 实现接口的类
class Human implements Eater {public void eat() {System.out.println("Human is eating.");}
}// 另一个实现接口的类
class Animal implements Eater {public void eat() {System.out.println("Animal is eating.");}
}

在这个例子中,Eater 是一个接口,它规定了一个方法 eat。然后,HumanAnimal 这两个类分别实现了这个接口,提供了各自的 eat 方法的具体实现。

接口中的权限:

在Java接口中,所有的成员都具有公共的访问权限。接口中的字段(成员变量)默认为 publicstaticfinal,而方法默认为 publicabstract

非 public 的数据没有用,不能被任何调用。(不写修饰符编译器也会默认为Public)

在 Java 中,与 C++ 不同,没有类似于 C++ 中的 "友元" 的概念

注意:

类只能继承一个类,但可以实现多个接口。

抽象类可以有构造器,而接口不能有。

抽象类中的抽象方法可以有具体的实现,而接口中的方法默认是抽象的,不能有实现。

final 和 static 的区别:

`final` 关键字:

1. **变量:** 当应用于变量时,`final` 表示该变量是一个常量,不可再被修改。一旦被赋值,就不能再改变。

    ```java
    final int MAX_VALUE = 100;
    ```

2. **方法:** 当应用于方法时,`final` 表示该方法不能被子类重写。

    ```java
    class Parent {
        final void display() {
            System.out.println("This is a final method.");
        }
    }

    class Child extends Parent {
        // 无法重写display方法
    }
    ```

3. **类:** 当应用于类时,`final` 表示该类不能被继承。

    ```java
    final class FinalClass {
        // 不能有子类
    }
    ```

`static` 关键字:

1. **变量:** 当应用于变量时,`static` 表示该变量属于类而不是实例。所有实例共享同一份变量。

    ```java
    class Example {
        static int count = 0;
    }
    ```

2. **方法:** 当应用于方法时,`static` 表示该方法属于类而不是实例。可以通过类名直接调用,不需要创建实例。

    ```java
    class Utility {
        static void doSomething() {
            System.out.println("This is a static method.");
        }
    ```

3. **块:** 当应用于块时,`static` 表示该块在类加载时执行,而不是在实例创建时执行。

    ```java
    class Example {
        static {
            System.out.println("This is a static block.");
        }
    }
    ```

对于静态变量(静态字段),可以通过类名直接访问并修改它们,但是静态方法不能重写。

没有静态类这个东西。 

 

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

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

相关文章

[足式机器人]Part4 南科大高等机器人控制课 Ch02 Rigid Body Configuration and Velocity

本文仅供学习使用 本文参考: B站:CLEAR_LAB 笔者带更新-运动学 课程主讲教师: Prof. Wei Zhang 南科大高等机器人控制课 Ch02 Rigid Body Configuration and Velocity 1. Rigid Body Configuration1.1 Special Orthogonal Group1.2 Use of Ro…

Centos7安装宝塔面板8.0.3并实现公网远程登录宝塔面板【内网穿透】

文章目录 一、使用官网一键安装命令安装宝塔二、简单配置宝塔,内网穿透三、使用固定公网地址访问宝塔 宝塔面板作为建站运维工具,适合新手,简单好用。当我们在家里/公司搭建了宝塔,没有公网IP,但是想要在外也可以访问内…

组合总和II(回溯、去重)

40. 组合总和 II - 力扣(LeetCode) 题目描述 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a…

相交链表(LeetCode 160)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路方法一:暴力法方法二:哈希表方法三:双栈方法四:双指针:记录链表长度方法五:双指针:互换遍历 5.实现示例参考文献 1.问题描述 给两个单链表的…

Java第二十一章网络通信

一、网络程序设计基础 1、局域网与互联网 为了实现两台计算机的通信,必须用一个网络线路连接两台计算机,如下图所示。 2、网络协议 1.IP协议 IP指网际互连协议,Internet Protocol的缩写,是TCP/IP体系中的网络层协议。设计IP的目的…

C++几种cast该如何使用

在C中&#xff0c;有四种主要的类型转换&#xff08;cast&#xff09;方法&#xff1a; 1. Static Cast&#xff08;静态转换&#xff09;&#xff1a; 用法&#xff1a;static_cast<new_type>(expression)情况&#xff1a;用于基本数据类型之间的转换&#xff0c;例如…

深入理解数据在内存中是如何存储的,位移操作符如何使用(能看懂文字就能明白系列)文章超长,慢慢品尝

系列文章目录 C语言笔记专栏 能看懂文字就能明白系列 &#x1f31f; 个人主页&#xff1a;古德猫宁- &#x1f308; 信念如阳光&#xff0c;照亮前行的每一步 文章目录 系列文章目录&#x1f308; *信念如阳光&#xff0c;照亮前行的每一步* 前言引子一、2进制和进制转化为什么…

Elasticsearch mapping 之 性能相关配置

ES 常见类型 通用类型: 二进制: binary 布尔型: boolean 字符串: keyword, constant_keyword, wildcard, text 别名: alias 对象: object, flattened, nested, join 结构化数据类型: Range, ip, version, murmur3 空间数据类型: geo_point, geo_shape, point, shape 性…

Verilog开源项目——百兆以太网交换机(四)令牌桶管理单元设计

Verilog开源项目——百兆以太网交换机&#xff08;四&#xff09;令牌桶管理单元设计 &#x1f508;声明&#xff1a;未经作者允许&#xff0c;禁止转载 &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN主页 &#x1f511;全新原创以太网交换机项目&#xff0c;Blog内容将聚焦…

说说你熟悉哪些maven命令?

Maven是一个流行的Java项目管理和构建工具&#xff0c;它提供了许多命令行工具来帮助开发者管理和构建项目。以下是一些常见的Maven命令&#xff1a; mvn clean&#xff1a;清理项目构建产生的临时文件。mvn compile&#xff1a;编译Java源代码到字节码文件。mvn test&#xf…

Element Plus设置input文本域组件不可鼠标拖拉高度

<el-input type"textarea" resize"none" v-model.trim"form.name" placeholder"请在此填写退款原因" maxlength"100" show-word-limit :rows"3" style"width: 341px" /> <-- resize"none…

KALI LINUX安全审核

预计更新 第一章 入门 1.1 什么是Kali Linux&#xff1f; 1.2 安装Kali Linux 1.3 Kali Linux桌面环境介绍 1.4 基本命令和工具 第二章 信息收集 1.1 网络扫描 1.2 端口扫描 1.3 漏洞扫描 1.4 社交工程学 第三章 攻击和渗透测试 1.1 密码破解 1.2 暴力破解 1.3 漏洞利用 1.4 …

前缀和|二分查找|LeetCode2234| 花园的最大总美丽值

作者推荐 贪心算法LeetCode2071:你可以安排的最多任务数目 本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 二分查找算法合集 题目 Alice 是 n 个花园的园丁&#xff0c;她想通过种花&#xff0c;最大化她所有花…

pycharm中debug,py文件

1、先把需要的实参传入 2、在合适位置打上断点 3、在小三角旁边右键调用调试 4.步进/步出查看 5.选择单步执行&#xff0c;走的更慢

使用Python实现爬虫IP负载均衡和高可用集群

做大型爬虫项目经常遇到请求频率过高的问题&#xff0c;这里需要说的是使用爬虫IP可以提高抓取效率&#xff0c;那么我们通过什么方法才能实现爬虫IP负载均衡和高可用集群&#xff0c;并且能快速的部署并且完成爬虫项目。 通常在Python中实现爬虫ip负载均衡和高可用集群需要一…

基于ssm助学贷款网站论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本助学贷款管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

CTF 7

信息收集 存活主机探测 arp-scan -l 端口探测 nmap -sT --min-rate 10000 -p- 192.168.0.5 服务版本等信息 nmap -sT -sV -sC -O -p22,80,137,138,139,901,5900,8080,10000 192.168.0.5Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-02 21:23 CST Stats: 0:01:30 elaps…

qt中sokect断开的几种情况

第一部分: 在Qt中,Socket的连接可以在多个时刻被断开。以下是一些常见的情况: 显式断开连接:您可以在代码中显式地调用QAbstractSocket类的disconnectFromHost()或close()方法来断开连接。socket->disconnectFromHost(); // 或者 socket->close();连接错误:当Socke…

服务器适合哪些使用场景_Maizyun

服务器适合哪些使用场景 在当今的数字化时代&#xff0c;服务器作为互联网基础设施的核心组件&#xff0c;被广泛应用于各种场景。本文将探讨服务器适合哪些使用场景。 一、Web服务器 Web服务器是服务器中最常见的一种&#xff0c;用于托管和运行网站。它负责处理来自客户端…

​劲松中西医结合医院专家讲解hpv36阳性是否严重

​劲松中西医结合医院专家讲解hpv36阳性严重性问题 HPV36阳性&#xff0c;就像一场潜在的暴风雨&#xff0c;预示着可能的危机。它代表了一种高危型的HPV感染&#xff0c;就像一只隐藏在暗处的猛兽&#xff0c;随时可能暴起伤人。然而&#xff0c;就像生活中的许多挑战&#x…