首页 > 编程语言 >Java--抽象类

Java--抽象类

时间:2024-07-20 18:54:14浏览次数:9  
标签:Java -- abstract Shape void 抽象类 方法 public

目录

抽象类的概念

抽象类的语法

抽象类的作用


抽象类的概念

在面向对象的概念中,所有的对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描述对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

我们之前所学习的Animal类或者Shape类,就可以被描述为抽象类。http://t.csdnimg.cn/sS449 不知道的朋友可以去看一下这篇博客的代码,这里我就不粘贴了。

抽象类的语法

我们来看看抽象类在语法上是如何定义的。

一个类如果被abstract修饰称为抽象类,抽象类中被abstract修饰的方法称为抽象方法。

抽象方法不用给出具体的实现体。

//抽象类
abstract class Shape {
    //抽象方法
    abstract public void draw();
}

当一个类中有抽象方法,这个类一定是抽象类。否则会报错。

抽象类当中可以有和普通类一样的成员变量和成员方法。

abstract class Shape {
    //抽象方法
    abstract public void draw();
    public int a ;
    public void show() {
        System.out.println("形状");
    }
}

抽象类和普通类的区别在于抽象类不能实例化,只是为了被继承。

可当我们写一个Circle子类用extend继承时,又会发现代码报红了:

这又是为什么呢?原因很简单,当一个普通类继承抽象类,那么这个普通类一定要重写抽象类中所有的抽象方法。

class Circle extends Shape {
    @Override
    public void draw() {
        System.out.println("圆");
    }
}

这时就不会报错了。

抽象方法不能被private修饰

抽象方法不能被static修饰

final和abstract不能同时存在

因为我们在多态重写方法时讲过,被final修饰的方法不能被重写,而被abstract修饰的方法一定会被子类重写,所以两个关键字不能同时存在。

抽象类虽然不能被实例化,但是可以发生向上转型。

    public static void main(String[] args) {
        Shape shape = new Circle();//向上转型
    }

能够发生向上转型,就能够实现动态绑定,也就可以发生多态。

public class Test8_3 {
    public static void drawMap(Shape shape) {
        shape.draw();
    }
    public static void main(String[] args) {
        Shape shape = new Circle();//向上转型
        drawMap(shape);
        drawMap(new Flower());
        //new Flower()-->匿名对象 没有名字的对象
        //匿名对象的缺点:不能重复使用
    }
}

运行结果:

抽象类中构造方法的作用:用来让子类调用,帮助这个抽象类初始化自己的成员。

抽象类的作用

抽象类只是为了被继承,但是普通类也能被继承,那么抽象类存在的意义是什么呢?实际上抽象类相当于多了一重编译器的校验,当你没有重写方法时会报错而普通类就不会。很多语法存在的意义就是为了“预防出错”。充分利用编译器的校验,在实际开发中是非常有意义的。

标签:Java,--,abstract,Shape,void,抽象类,方法,public
From: https://blog.csdn.net/kkkkkkk6666666/article/details/140575154

相关文章

  • 手把手教你用聆思CSK6开发板接入ChatGPT
    前言多模态交互离不开硬件载体,近期有不少开发者在研究聆思CSK6大模型开发板除了使用出厂示例自带的星火大模型,能不能接入ChatGPT、文心一言、通义千问、豆包、智谱glm、kimi等大模型,这个是必须支持的。但由于各家接口和数据格式不一样,有些朋友直接参考星火大模型接入的方式......
  • HDFS概述
    Hadoop的分布式文件系统hadoop的三大核心子项目(HDFS,YARN,MapReduce)之一,用来解决海量数据存储问题优点:海量数据存储,典型文件大小GB~TB,百万以上文件数量,PB以上数据规模(文件切分分散存储,128M)高容错(多副本策略),高可用(HA,安全模式),高可扩展(10K节点规模)构建成本低(构建在廉价商用机器......
  • 生成模型
    AEVAEGAN应用目标生成式任务(生成、重建、超分辨率、风格迁移、补全、上采样等)核心思想生成器G和判别器D的一代代博弈生成器G:生成网络,通过输入生成图像,希望生成的数据可以让D分辨不出来判别器D:二分类网络,将生成器生成图像作为负样本,真实图像作为正样本,希望尽可能分辨出G......
  • 每周总结
    在过去的一周里,我承担了安装和配置Zookeeper,并连接HBase的任务。这是我首次深入接触分布式系统的组件,对我而言是一次宝贵的学习和实践机会。首先,我从Zookeeper的官方网站下载了最新版本,并按照安装文档进行解压和配置。在配置过程中,我遇到了权限问题,Zookeeper的dataDir目录默认设......
  • kettle从入门到精通 第七十九课 ETL之kettle kettle读取数据库BLOB字段转换为文件
     上一课我们讲解了如何将文件以二进制流的方式写入数据库,本节课我们一起学习下如何将二进制数据读取为文件。 1、将二进制流转换为文件这里主要用到了步骤【文本文件输出】。表输入步骤从表中读取blob字段,java代码定义二进制流转换为文件的全路径,文本文件输出步骤根据全路径和......
  • idea内置数据库DataGrip + 多表操作sql语句 -- 逻辑外键建表 + 案例联系
    逻辑外键建表+案例联系--=====================================多表设计================================---------------------一对多职位与员工--员工子表createtabletb_emp(idintunsignedprimarykeyauto_incrementcomment'id',user......
  • 用【游乐场】说清楚“硬件、操作系统、跨平台、应用软件、开发语言、代码”的关系
    经常有小伙伴对一些计算机技术和概念不太清楚,产生很多误区,甚至张冠李戴,在一起聊天时又很难给对方解释清楚,经过苦思冥想,终于想到一些比喻,能够很好地阐述了“硬件、操作系统、跨平台、应用软件、开发语言、代码”之间的关系。1、硬件陆地(Intel)与海洋(AMD):硬件就像是一个广阔的自然......
  • java进阶(面向对象实例代码)
    1.抽象类和接口抽象类示例abstractclassAnimal{abstractvoidmakeSound();voidsleep(){System.out.println("Sleeping...");}}classDogextendsAnimal{@OverridevoidmakeSound(){System.out.println("Bark&......
  • kettle从入门到精通 第七十八课 ETL之kettle kettle将文件写入数据库BLOB字段
    前些日子一个小伙伴私聊我咨询如何将数据库中的BLOB字段读取为文件。帮他顺利读取文件之后我在想kettle肯定支持将文件写入数据库BLOB字段。今天先来一起学习下如何将文件以二进制流的方式写进数据库。 1、创建数据表,脚本如下:CREATETABLE`file`(`id`bigintNOTNULLA......
  • 2024年IDEA&IntelliJ系列最新激活码(2088)!
    蛋疼ing,仅供学习使用。K384HW36OB-eyJsaWNlbnNlSWQiOiJLMzg0SFczNk9CIiwibGljZW5zZWVOYW1lIjoibWFvIHplZG9uZyIsImxpY2Vuc2VlVHlwZSI6IlBFUlNPTkFMIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2U......