“抽象类”到底抽不抽象?实例对比一看便知!

简介: “抽象类”到底抽不抽象?实例对比一看便知!

 

目录

什么是抽象类?

如何定义抽象类?

什么是抽象方法?

如何定义抽象方法?

抽象类和抽象方法的实现


Hello!大家好哇!我是灰小猿!

最近在学习C#和Java的抽象类和接口时搞得头疼,今天在这里和大家分享一下Java和C#中的抽象类到底是怎么样的存在,是否真的像名称那样“抽象”?

接下来,我们通过抽象类在Java和C#中的应用对比分析一下!

什么是抽象类?

首先,什么是抽象类?

其实在进行开发时,我们可以假定抽象类是一种对内容的约束,打个比方来说,平行四边形类应该具有的特征和属性是:对边平行且相等,具有面积和周长;等边三角形类应该具有的特征和属性是:三条边长度相等,具有面积和周长,这些描述视乎都是合乎情理的。

那么我们对比一下其实就可以得到一个图形类的特征属性:具有面积和周长。所以我们就可以将该图形类定义为一个抽象类,所有继承该图形类的对象都应该具有它的特征属性,即具有面积和周长,这就可以说给了某些继承这个图形类的对象一个约束条件,就是必须面积和周长才能继承该类。

如何定义抽象类?

在解决实际问题时,一般将父类定义为抽象类,并且在Java和C#中抽象类具有以下公共特征:

image.gif编辑

以下是抽象类在Java和C#中的实现代码,该代码在Java和C#中通用:

abstract class Test
{
    //使用abstract关键字实现抽象类的创建
}

image.gif

什么是抽象方法?

我们知道在类中是具有方法的,那么顾名思义,在抽象类中也是具有方法的,并且在抽象类中定义的方法可以是抽象方法,注意:可以是抽象方法,也就是说在抽象类中定义的方法,可以是抽象的,也可以是普通的。

如上面的图形类,其中每个图形都具有的属性是面积和周长。那么我们就可以将计算面积和周长的方法定义为抽象方法。也就是说,当其他类继承该抽象类时,必须要实现面积和周长的方法。

如何定义抽象方法?

使用关键字abstract定义的类成为抽象类,使用该关键字定义的方法成为抽象方法。抽象方法具有以下特征:

image.gif编辑

以下是在一个抽象类中定义抽象方法的代码,在Java和C#中通用:

//定义图形类为抽象类,在抽象类中定义抽象方法求周长
abstract class ShapeArea
{
    public abstract void Perimeter();
}

image.gif

抽象类和抽象方法的实现

我们在上面说道一般将父类定义为抽象类,因此想要实现抽象类及其其中的抽象方法,就必须继承或派生自该抽象类。

注意啦:在C#中继承抽象类使用“:”

而在Java中继承抽象类则需要使用“extends”关键字。

同时,在继承了抽象类之后,若该抽象类中存在抽象方法,则需要使用关键字override对该方法进行重写。同时这也是实现抽象方法的一种方式。

下面分别是在Java和C#中实现抽象方法的案例分析,使用圆形类继承图形抽象类实现求面积:

在Java中:

定义抽象类:

package exeicise1;
//定义图形抽象类
public abstract class ShapeArea {
abstract void Area(); //定义抽象方法
}

image.gif

定义圆形类继承抽象类:

package exeicise1;
//定义圆形类继承抽象类
public class Circle extends ShapeArea{
public double r;
public double s;
//对抽象方法重写
public void Area() {
    s = 3.14 * r* 2;
    System.out.println("面积是:" + s);
}
}

image.gif

在主方法中调用圆形类输出方法:

package exeicise1;
public class Testmain {
public static void main(String[] args) {
    Circle circle = new Circle(); //定义对象接收圆形类
    circle.r = 2;
    circle.Area();
}
}

image.gif

结果为:

image.gif编辑

在C#中:

定义图形类:

using System;
using System.Collections.Generic;
using System.Text;
namespace Texta
{
//定义抽象类
abstract class ShapeArea
{
        public abstract void Area(); //定义抽象方法
    }
}

image.gif

定义圆形类并继承抽象类:

using System;
using System.Collections.Generic;
using System.Reflection.PortableExecutable;
using System.Security;
using System.Text;
//using ShapeArea;
namespace Texta
{
//定义圆形类继承抽象类
    class Circle : ShapeArea
    {
        public double r;
        public double s;
//对抽象方法重写并实现
        public override void Area()
        {
            s = 3.14 * r * r;
            Console.WriteLine("面积是:" + s);
        }
    }
}

image.gif

在主方法调用圆形类实现:

using System;
using System.Reflection.PortableExecutable;
namespace gyg_2_3
{
    class Program
    {
        static void Main(string[] args)
        {
            Circle circle = new Circle();
            circle.r = 2;
            circle.Area();
        }
    }
}

image.gif

运行结果如下:

image.gif编辑

小伙伴对比就会发现其实在Java和C#中抽象类的定义和实现是基本相同的。实现接口类的主要目的就是为了制定一种对具有相同属性的程序的约束。

觉得有用记得点赞关注哟!

同时有不足的地方还希望能与小伙伴一起交流!

大灰狼期待与你一同进步

image.gif编辑

目录
相关文章
|
存储 Shell Linux
【Shell 命令集合 文档编辑】Linux 文本统计 wc命令使用指南
【Shell 命令集合 文档编辑】Linux 文本统计 wc命令使用指南
329 0
|
分布式计算 监控 调度
给技术新人的ODPS优化建议
数据开发基本都是从陌生到熟悉,但是写多了就会发现各种好用的工具/函数,也会发现各种坑,本文分享了作者从拿到数据到数据开发到数据监控的一些实操经验。
96440 127
|
11月前
|
数据采集 人工智能
Dify 工作流分享-小红书文案生成器
本文介绍了生成小红书文案的具体流程和节点设置,包括输入主题、风格、字数,以及处理URL链接和直接主题的两种方式。最后,三金分享了实际测试效果和相关资源。
1888 1
Dify 工作流分享-小红书文案生成器
|
Cloud Native 持续交付 云计算
云端新纪元
在当今技术飞速发展的时代,云平台与云原生技术正重塑着我们的数字世界。本文将深入探讨云平台和云原生技术的核心概念、实际应用以及未来发展趋势,揭示它们如何推动企业数字化转型和创新。通过具体案例分析,我们将看到这些技术如何在不同领域中发挥巨大作用,并展望其未来的发展前景。
116 1
|
JSON 数据可视化 API
技术心得:如何用Python和API收集与分析网络数据?
技术心得:如何用Python和API收集与分析网络数据?
124 2
|
存储 数据采集 自然语言处理
【BERT-多标签文本分类实战】之四——数据集预处理
【BERT-多标签文本分类实战】之四——数据集预处理
1181 1
【BERT-多标签文本分类实战】之四——数据集预处理
|
敏捷开发 JavaScript 前端开发
程序员学习新技术的10个建议
程序员学习新技术的10个建议
199 0
|
Java 容器
第二季:4我们知道ArrayList是线程不安全,请编码写一个不安全的案例并给出解决方案。【Java面试题】
第二季:4我们知道ArrayList是线程不安全,请编码写一个不安全的案例并给出解决方案。【Java面试题】
127 0
|
算法 数据处理
基于AIE平台的决策树算法下的贵州省黔东南州水稻提取
依据作物在不同物候期内卫星影像的光谱存在差异的特征和地形因子,可建立水稻提取算法,进行水稻提取。
基于AIE平台的决策树算法下的贵州省黔东南州水稻提取