Java:抽象类和接口(1)

news2024/11/15 17:45:03

一 抽象类

1.什么是抽象类

在 Java SE 中,抽象类是一种用于为其他类提供通用行为的类。它允许你定义一组方法和字段,而具体的实现留给子类来完成。抽象类不能被实例化,必须通过继承它的子类来实现其抽象方法并进行实例化。

public abstract class Shape {

    public abstract void draw();

}
public class Cycle extends Shape{
    public void draw(){
        System.out.println("画一个圆。。。。。。。");
    }
}
public class Flower extends Shape{
    public void draw(){
        System.out.println("画一朵花.。。。。。。。");
    }
}
public class Test {
    public static void main(String[] args) {
        Cycle cycle=new Cycle();
        Flower flower =new Flower();
        Shape[] shapes={cycle,flower,cycle,cycle,flower};
        for (Shape s:shapes) {
            s.draw();
        }

       // Shape shape=new Shape();

        //Shape shape=new Cycle();
    }

}

2.抽象类的定义

使用 abstract 关键字定义一个类为抽象类。抽象类可以包含抽象方法(没有方法体的方法)和非抽象方法(普通方法),但它们不能直接被实例化。

public abstract class Shape {
abstract class Shape {
    // 抽象方法(没有方法体)
    public abstract void draw();

    // 具体方法(有实现)
    public void move() {
        System.out.println("Moving the shape");
    }
}

3.抽象方法

抽象方法只有方法的签名,没有具体的实现。它们在抽象类中声明,但必须由子类提供实现。 

父类的抽象方法
public abstract class Shape {

    public abstract void draw();

}
在子类中具体实现
public class Cycle extends Shape{
    public void draw(){
        System.out.println("画一个圆。。。。。。。");
    }
}
public class Flower extends Shape{
    public void draw(){
        System.out.println("画一朵花.。。。。。。。");
    }
}
抽象方法的特点
  • 抽象方法必须在抽象类中声明。
  • 子类必须实现所有的抽象方法,除非子类本身也是抽象类。
  • 抽象方法不能有方法体(没有大括号和具体的实现代码)。

注:如果子类也是抽象方法,则在子类的子类中实现,欠下的总是要还的。

public abstract class Shape {

    public abstract void draw();

}


abstract class A extends Shape{
    public abstract void drink();
}

 class B extends A{
    public void draw(){
        System.out.println("画画");
    }
    public void drink(){
        System.out.println("喝水");
    }
}

4. 抽象类的特点

  • 不能实例化:抽象类不能直接创建对象。例如,Shape shape = new Shape(); 是不合法的,因为抽象类无法实例化。
  • 可以包含具体方法:抽象类不仅可以包含抽象方法,还可以包含具体方法,即有实现的方法。
  • 可以包含字段:抽象类可以像普通类一样包含成员变量(字段)。
  • 可以有构造器:尽管抽象类不能被实例化,但它可以有构造器,供子类调用。

注:抽象类可以有抽象方法和普通方法,但是普通类只能有普通方法不能有抽象方法。 

 总结:

  1. 如果一个类中有抽象方法,那么这个类必定是抽象类
  2. 抽象类的抽象方法可以没有具体实现,在子类中实现
  3. 抽象类的出现就是为了被继承的
  4. 抽象类不能被实例化,它的目的是为其他类提供基础和模板。
  5. 抽象类可以包含字段、构造器、具体方法等元素,使得它比接口更灵活。

 希望能对大家有所帮助!!!!!

 

 

 

 

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

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

相关文章

MATLAB系列04:循环结构

MATLAB系列04:循环结构 4. 循环结构4.1 while循环4.2 for循环4.2.1 运算的细节4.2.2 break语句和continue语句4.2.3 嵌套循环 4.3 逻辑数组和向量化4.3.1 逻辑数组的重要性4.3.2 用 if/else 结构和逻辑数组创建等式 4.4 总结 4. 循环结构 循环(loop)是一种 MATLAB …

初识Linux · 进程(4)

目录 前言: 进程的状态 直接谈论进程的状态 僵尸进程和孤儿进程 纯理论部分 运行态: 阻塞态: 挂起态: 进程的优先级以及切换问题 切换: 优先级: 前言: 承接上文,进程1到…

CPU 和 GPU:为什么GPU更适合深度学习?

目录 什么是 CPU ? 什么是 GPU ? GPU vs CPU 差异性对比分析 GPU 是如何工作的 ? GPU 与 CPU 是如何协同工作的 ? GPU vs CPU 类型解析 GPU 应用于深度学习 什么是 CPU ? CPU(中央处理器)…

二叉树链式结构遍历(指针、递归)

当二叉树不使用数组实现,而是使用链式结构,用指针将节点相连时, 二叉树便会衍生出很多问题,如前序遍历、中序遍历、后序遍历、层序遍历。 下面我将用递归的方法完成二叉树的遍历。 但在这之前,我们还得构造链式结构…

深入解析 Apache Ranger

一. 概述 1.什么是 Apache Ranger? Apache Ranger 是一个为大数据平台提供集中化安全管理的开源框架,专门用于确保 Hadoop 生态系统中的数据安全。Ranger 通过提供细粒度的访问控制和监控,帮助组织实现对数据的全面安全管理,确保…

第四天旅游线路预览——从换乘中心到观鱼台

第四天:从贾登峪到喀纳斯风景区入口,晚上住宿贾登峪; 换乘中心有4 路车,喀纳斯②号车,去观鱼台,路程时长约20分钟; 将上面的的行程安排进行动态展示,具体步骤见”Google earth stu…

7.Jmeter数据驱动(csv数据文件设置)+Jmeter数据库操作

一、Jmeter数据驱动 因为:工作中,有些公司一个接口就是一个吻用例,另外一些公司一个接口有几十个用例,就需要用到数据驱动。 特别注意:断言,如果有共同字段,那么就用json断言,如果没…

文档管理系统Mayan EDMS的安装

今天台风 “贝碧嘉” 在上海登陆,这名字起的那叫一个绝,听起来像是 卑鄙家, 说的就是这台风 卑鄙到家了 什么是 EDMS? EDMS 代表电子文档管理系统,它是 DMS 的更现代版本。DMS 是文档管理系统。一种用于存储、排序和分…

二叉树的前中后序遍历(非递归迭代实现)

1.二叉树的前序遍历 1.1 思路分析 前序遍历的顺序是根-左子树-右子树,所以首先从根节点开始,顺着访问左子树:1、2、4。此时,还剩下节点1、节点2、节点3的右子树没有访问。后面倒着访问节点1、2、4的右子树就行了。所以非递归的前…

解决跨境电商平台账号无法访问的常见问题

跨境电商的迅猛发展,越来越多的卖家选择在全球各大电商平台如亚马逊、eBay等进行商品销售。然而,在实际运营过程中,卖家经常会遇到账号无法访问、应用打不开等问题,导致业务受阻。本文将针对这些问题进行详细分析,并提…

【医疗影像】THE BEER-LAMBERT LAW

吸光度 A l o g 10 ( I 0 I ) A log_{10}(\frac{I_0} I) Alog10​(II0​​) 如果您了解光谱仪如何工作,您就会知道它使一系列波长的光穿过物质溶液(样品cell),同样地,也会穿过溶剂(参考cell) …

信息安全工程师(5)域名与域名解析

一、域名 1. 定义与功能 域名(Domain Name)是互联网上用于标识网站或服务器地址的名称,由一串由点分隔的字符组成,如“example.com”。域名的主要功能是提供一种便于记忆和输入的地址形式,以代替难以记忆的IP地址。域名…

【Axure原型】B端系统登录注册页设计成这样,就不用跟小孩一桌了

前言 在B端后台中,登录注册页这个东西,因为感觉很简单,所以经常不被产品经理们重视。但是登录注册页作为一个后台系统的门面,直接影响用户第一印象,又是非常重要的存在。 登录注册页的价值 B端系统登录注册页是用户…

浸没边界法空间精度相关的论文的阅读笔记

Convergence proof of the velocity field for a stokes flow immersed boundary method https://doi.org/10.1002/cpa.20233 研究对象的选取 他这里为什么能够选取一个周期性边界的流场啊?为什么不是狄利克雷边界或者诺伊曼边界? 方形流场的边界值 …

【Linux】精通GDB:打造你的Linux调试超能力

🌈 个人主页:Zfox_ 🔥 系列专栏:C从入门到精通 目录 一: 🔥 什么是GDB / CGDB 二: 🔥 CGDB的安装 🍊 Linux-centos 三: 🔥 cgdb的使用背景 &#…

vmware,centos8(虚拟机) 的安装

安装vmware 点击下方网址 虚拟机安装地址https://www1.msc23.cn/vm/?bd_vid8829610582362807097选择VMware17 打开文件所在地,双击安装 同意条款 选择安装位置 不将VMware配置到环境变量path 不检查更新,不加入客户体验 创建桌面快捷方式 开始安装 安装完成…

47.面向对象综合训练-汽车

//题目需求:定义数组存储3个汽车对象 //汽车的属性:品牌,价格,颜色 //创建三个汽车对象,数据通过键盘录入而来,并把数据存入到数组当中 1.标准的JavaBean类 public class Car {private String brand;//品…

基于yolov8的谢韦尔钢材缺陷检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的谢韦尔钢材缺陷检测系统,充分利用了YOLOv8算法的高效性和准确性,为钢材表面缺陷检测提供了先进的解决方案。该系统通过深度学习技术,特别是YOLOv8这一实时目标检测算法,能够快速、准确地识别钢材表面的…

【Linux进程】Linux Shell编程实战:构建简易脚本示例与技巧详解

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:Linux “ 登神长阶 ” 🤡往期回顾🤡:暂无 🌹🌹期待您的关注 🌹🌹 ❀Linux进程 📒1. 获取输入&…

《Nginx核心技术》第17章:使用自签CA配置HTTPS加密反向代理访问

作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…