浅谈,Java当中普通类与抽象类的区别

2024-05-28 00:36

本文主要是介绍浅谈,Java当中普通类与抽象类的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

这篇博客没有什么特别有技术含量的地方,只是对于JavaSE 基础语法的一个小总结,基本功还是很重要的,因此笔者想写下来而已

普通类

什么是普通类?

普通类是可以直接实例化的类,包含具体的实现和属性。它是Java中最常见的类类型,用于创建对象和实现具体功能。

普通类的特点

常见的特征笔者就不说了,就说几个笔者觉得重要的

1.实例化  普通类可以直接实例化

class Dog {void bark() {System.out.println("Bark");}
}Dog dog = new Dog(); // 可以直接实例化

2.方法实现  普通类的方法需要具体实现

class Cat {void eat() {System.out.println("The cat is eating");}
}

3.不能包含抽象方法。

4.能被继承,但是不要求子类重写方法

class Animal {}class Dog extends Animal {}

抽象类

与普通类不同的,是抽象类

抽象类是使用abstract关键字定义的类,不能直接实例化。它可以包含抽象方法(没有方法体的方法),这些方法必须在子类中实现。抽象类通常用于定义一组行为和属性的通用接口。

抽象类的特点

与普通类呼应,抽象类有那么几个特点

1.不用也不能实例化

abstract class Animal {abstract void makeSound();
}// Animal a = new Animal(); // 错误,不能实例化

2.存在抽象方法,不用在抽象类中实现,可以在子类中实现

abstract class Animal {abstract void makeSound();
}class Dog extends Animal {void makeSound() {System.out.println("Bark");}
}

3.可以存在普通方法

abstract class Animal {abstract void makeSound();void Say() {System.out.println("CN NO.1");}
}

4.子类必须实现所有的抽象方法,除非子类也是抽象类。

abstract class Animal {abstract void make();
}class Dog extends Mammal {void make() {System.out.println("Bark");}
}

综上所述的总结

特性

普通类

抽象类
实例化可以直接实例化不能直接实例化
抽象方法不能包含抽象方法可以包含抽象方法
方法实现所有方法都有具体实现可以有具体方法和抽象方法
继承可以被继承,不要求实现方法子类必须实现所有抽象方法或为抽象类
用途实现具体功能定义通用行为和属性的接口

 那么我们就该思考了,为什么我们需要普通类和抽象类

以下内容有的来自网络,有的来自笔者自己的理解,有错误,欢迎直接私信骂我就好了,不用和我客气

普通类,是直接用来描述对象的,也是直接用来实现某种具体的需求的

但是,当你想要定义一个类的通用接口(方法和属性),而具体实现依赖于子类时,使用抽象类。抽象类适合用来为相关类提供一个统一的接口。

比如

public  abstract class Users
{protected String name;protected WORK[] Work;public Users(String name) {this.name = name;}@Overridepublic String toString() {return "Users{" +"name='" + name + '\'' +'}';}public abstract int menu ();public  void  Doop(int choice, booklist Booklist){Work[choice].work(Booklist);}
}
public class Adminuser extends Users
{public Adminuser(String name){super(name);this.Work=new WORK[]{new Exitop(),new Findop(),new Addop(),new Deleteop(),new Show()};}public int menu (){System.out.println("*********管理员************");System.out.println("1.查找图书");System.out.println("2.增加图书");System.out.println("3.删除图书");System.out.println("4.显示图书");System.out.println("0.退出系统");System.out.println("*********************");System.out.println("请输入你的操作:");Scanner sc = new Scanner(System.in);int choice = sc.nextInt();return choice;}}
public class Nomaluser extends Users
{public Nomaluser(String name){super(name);this.Work=new WORK[]{new Exitop(),new Findop(),new Borrowop(),new Returnop(),new Show()};}public int menu (){System.out.println("**********用户***********");System.out.println("1.查找图书");System.out.println("2.借阅图书");System.out.println("3.归还图书");System.out.println("4.显示图书");System.out.println("0.退出系统");System.out.println("*********************");System.out.println("请输入你的操作:");Scanner sc=new Scanner(System.in);int choice=sc.nextInt();return choice;}
}

在上述例子中,定义了抽象方法      public abstract int menu ()

在两个类中通过方法重写,实现了不同的需求

有一个小总结

  • 普通类用于创建具体的对象和实现具体的功能。
  • 抽象类用于定义通用的行为和属性接口,提供代码复用和强制实现机制,尤其在框架和设计模式中发挥重要作用。

写在结尾

这篇博客如果能有人看我会很开心,最好能指出我的错误,但我其实还是写给自己看的,也算是一个阶段性的回顾吧,比起把这些东西写在笔记本里不知道哪天就丢了,我更希望能行写在这里让能看到的人一起进步,顺带指出我的错误!

这篇关于浅谈,Java当中普通类与抽象类的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1009045

相关文章

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2