首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Linux驱动

    9.JAVA-抽象类定义

    1.抽象抽象类,用来表示一个抽象概念. 是一种只能定义类型,而不能产生对象的类,所以定义了抽象类则必须有子类的出现. 抽象类的好处在于能够明确地定义子类需要覆写的方法 抽象类需要使用abstract声明. 抽象类里可以实现抽象方法,该方法特征在于:只有声明,并没有方法体(所以子类必须全部覆写,并且子类不能为抽象类) 比如图形(Shape)类, 就是一个抽象的概念,因为我们无法计算这个“图形”的面积,所以它的成员函数 ,用来初始化抽象类的属性, 抽象类不能使用final定义, 2.抽象内部类定义 在java中,如果我们抽象类的子类只有一个的话,则可以将它封装为抽象内部类里,从而为用户隐藏了这个无需知道的类.在类库中很常见 抽象类缺点: 由于Java的单继承,每个类只能从一个抽象类继承.没有接口灵活. 下章学习: 10.JAVA-接口、工厂模式、代理模式、详解

    86620发布于 2019-05-24
  • 来自专栏java学习

    面试题9(包含抽象方法的一定是抽象类吗)

    出现频率: ★★★★ 【面试题解析】面试题9 涉及几个知识点,需要求职者综合掌握。如果一个类包含一个抽象方法时,该类就必须声明为抽象的。 参考答案: (b)。

    1.7K80发布于 2018-04-16
  • 来自专栏海天一树

    小朋友学Java(9):抽象类与接口

    在Java中,可以通过两种形式来体现面向对象的抽象抽象类和接口。 一、抽象类 (一)抽象方法 在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。 (二)抽象类 如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。 注意:包含了抽象方法的类一定是抽象类,但抽象类不一定要包含抽象方法。一个类,只要用了abstract来修饰,就是一个抽象类。 从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量(虽然可以定义变量)。 (二)设计层面上的区别 抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象抽象类是对整个类整体进行抽象,包括属性、行为;但是接口却是对类局部(行为)进行抽象

    74890发布于 2018-04-17
  • 来自专栏Java

    【Java SE语法篇】9.抽象类和接口

    1.2 抽象类的语法 在Java 中,一个类如果被abstract 修饰的类成为抽象类,抽象类中被abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现体。 ]; } // 抽象方法,无方法体 访问权限 abstract 返回值类型 抽象方法名称(参数); } 从以上格式可以看出,抽象类的定义比普通类多了抽象方法,类的其他功能依然存在 1.3 抽象类的特性 抽象类不能直接实例化对象 抽象方法不能是被 private 修饰的 抽象方法不能被final 和 static修饰,因为抽象方法要被子类重写。 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修饰,如果一个非抽象类继承了抽象类,那么这个子类必须实现抽象类中的全部抽象方法。 ,但是有抽象方法的类一定是抽象抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量 2.

    29210编辑于 2024-05-07
  • 来自专栏瓜农老梁

    Netty9# Netty抽象内存分配器实现原理

    前言 本文通过分析抽象内存分配器API梳理其基于堆内存、堆外内存分配的实现原理。最后走查了CompositeByteBuf这种类似数据库视图的实现原理。 直接在内核态分配降低GC频率和停顿 内存分配和收回比较慢、需要手动处理 内存分配器类图 字节缓存的分配出自ByteBufAllocator,其实现类AbstractByteBufAllocator(抽象类 CompositeByteBuf compositeBuffer() 分配一个CompositeByteBuf(将多个buffers组合成一个buffer)由实现类决定堆内存或者堆外内存 二、内存分配器API解读 下面走查下抽象内存分配器 addComponents0(false, 0, buffers, offset); // 注解@8 consolidateIfNeeded(); setIndex0(0, capacity()); // 注解@9 注解@9 设置整个CompositeByteBuf的读索引和写索引,读索引初始值为0;写索引为components[size - 1].endOffset,也就是整个Conponent数组中其每个元素维护的

    76630发布于 2021-01-27
  • 来自专栏C++小白

    大话设计模式07-抽象工厂模式-2020-9-22

    1.抽象工厂模式简介 抽象工厂模式:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体实现的类。 UML类图如下: 抽象工厂类对应有多个系列的产品,每个系列都有一个抽象产品父类和多个具体产品子类。 类图如下所示 c++代码实现如下 #include<exception> #include <iostream> #include<string> using namespace std; //7、抽象工厂模式

    26220编辑于 2022-02-22
  • 来自专栏撸码那些事

    抽象那些事】不完整的抽象&多方面抽象&未用的抽象&重复的抽象

    不完整的抽象 抽象未支持所有互补或相关的方法时,将导致这种坏味。 为什么要有完整的抽象? 一种重要的抽象实现手法是创建内聚而完整的抽象抽象未支持相关的方法时,可能会影响抽象的内聚性和完整性。 多方面抽象 抽象被赋予不止一项职责时,将导致这种坏味。 为什么不可以有多方面抽象? 单一职责原则指出,抽象必须承担单一而明确的职责,且必须完全封装该职责。 未用的抽象 创建的抽象未用(未被直接使用或继承)时,将导致这种坏味。有以下两种表现形式: 未引用的抽象:未用的具体类 鳏寡抽象:没有任何派生抽象的接口/抽象类 为什么不可以有未用的抽象? 重复的抽象 两个抽象的名称、实现或两者相同时,将导致这种坏味。 名称相同 两个不同的抽象重名将影响可理解性。 重构建议 对于名称相同的重复抽象,可以将其中一个抽象改为不同的名称。 对于实现相同的重复抽象,如果实现完全相同,可将其中一个抽象删除。

    87120发布于 2018-06-21
  • 来自专栏韩曙亮的移动开发专栏

    【Kotlin】抽象类 ( 声明 | 抽象类成员 | 抽象类继承 | 抽象方法覆盖 | 抽象方法实现 )

    抽象类总结 II . 抽象类声明 III . 抽象类中的 ( 正常 / 抽象 ) 的 ( 成员 / 方法 ) IV . 抽象类继承 V . 抽象方法的覆盖 VI . 抽象方法的实现 I . 抽象类总结 ---- 抽象类总结 : ① 声明 : 抽象类中使用 abstract 声明 ; ② 成员 : 抽象类中既可以定义正常属性和方法 , 又可以定义抽象的属性和方法 ; ③ 继承 : 抽象类可以继承抽象类 , 抽象类也可以继承正常类 , 正常类可以继承抽象类 ; ④ 重写 : 抽象类中可以使用抽象方法重写正常方法 , 也可以进行正常的方法重写 ; ⑤ 特征 : 抽象方法只能定义在抽象类中 , 正常类中不能有抽象方法 抽象类中的 ( 正常 / 抽象 ) 的 ( 成员 / 方法 ) ---- 0 . 抽象类内成员总结 : 抽象类中可以定义正常的成员和方法 , 也可以定义抽象的成员和方法 ; 1 . ("正常类继承抽象类 , 必须实现抽象类中的抽象方法") } } ② 抽象类子类 : 如果抽象类继承抽象类 , 可以不实现父累抽象方法 ; abstract class Father{

    1.9K40编辑于 2023-03-27
  • 来自专栏撸码那些事

    抽象那些事】缺失抽象

    这就是抽象。对于软件工程师来说,抽象能力是最重要的能力之一,也恰恰是最难得的能力之一。 应用抽象原则的实现手法 提供清晰的概念边界和唯一身份 每个抽象都必须有清晰而明确的概念边界,还必须有身份。 如果只提供方法的一部分,抽象既不内聚也不完整。 赋予单一而重要的职责 确保每个抽象都分配单一而重要的职责。 单一:每个抽象都应该只负责一件或一类事情。 重要:抽象不能太鸡肋。 违反抽象原则导致的坏味 我们这篇博客主要讲解分析缺失抽象坏味,对于其它抽象坏味将在后面的博客讲解分析。 缺失抽象 使用一系列数据或编码字符串,而不创建类或接口时,将引发这种坏味。 通常,由于缺失抽象,相关的数据和行为将会分散在其它抽象中,这将会导致两个问题l: 可能会向其它抽象暴露实现细节,违反封装原则 数据和相关的行为分散在不同的抽象中,可能导致实体之间高度耦合,结果是代码脆弱且难以重用 因为在创建抽象前,一定要根据应用抽象具体情况分析,再决定是否要创建抽象

    1.2K150发布于 2018-05-19
  • 来自专栏撸码那些事

    抽象那些事】不完整的抽象&多方面抽象&未用的抽象&重复的抽象

    不完整的抽象 抽象未支持所有互补或相关的方法时,将导致这种坏味。 为什么要有完整的抽象? 一种重要的抽象实现手法是创建内聚而完整的抽象抽象未支持相关的方法时,可能会影响抽象的内聚性和完整性。 多方面抽象 抽象被赋予不止一项职责时,将导致这种坏味。 为什么不可以有多方面抽象? 单一职责原则指出,抽象必须承担单一而明确的职责,且必须完全封装该职责。 使用提取类重构多方面抽象 未用的抽象 创建的抽象未用(未被直接使用或继承)时,将导致这种坏味。 有以下两种表现形式: 未引用的抽象:未用的具体类 鳏寡抽象:没有任何派生抽象的接口/抽象类 为什么不可以有未用的抽象? 设计中的抽象未被使用,就没有发挥任何作用,因此违反了抽象原则。 重构建议 对于名称相同的重复抽象,可以将其中一个抽象改为不同的名称。 对于实现相同的重复抽象,如果实现完全相同,可将其中一个抽象删除。

    61890发布于 2018-05-23
  • 来自专栏dylanliu

    抽象

    这是抽象抽象,即如何界定本质?这个方法需要我们在实践中抽象出自己的方法论,才能不被纷繁事物晃花了眼。 抽象层次 抽象层次包含两个概念:1)复杂系统需要分层,每层关注不同的粒度,合而为整体。 2)在某一抽象层次上,抽象出的功能、概念应处于同一抽象层次,而不应混合不同抽象层次的功能、概念。 1) 分层 分层有几个目的:1⃣ 易于复用。 2⃣减少信息量。 2) 同一抽象层次 同一抽象层次在实践中是很重要的。编码时经常看到不同的人将不同抽象层次的代码放到一个接口中,这就将抽象的威力大大降低了。 抽象也是如此,本质上抽象是在经过大量实践之后归纳出来的,可是不同的人有不同的经历,每个人对人生、世界的抽象也是不一样的,因此形成了不同的人生观、世界观。系统也如是,不同人从各自角度出发去认识。 总结 抽象是一个很主观的概念,可以说我们一直以来接触到的世界就是一个抽象过了的世界,从这点来说,抽象有助于提高我们的逻辑能力,因为我们已经知道了我们意识中的世界并不是我们看到的,而是前人从他们的角度抽象出来的

    1.1K50发布于 2019-07-01
  • 来自专栏撸码那些事

    抽象那些事】缺失抽象

    这就是抽象。对于软件工程师来说,抽象能力是最重要的能力之一,也恰恰是最难得的能力之一。 应用抽象原则的实现手法 提供清晰的概念边界和唯一身份 每个抽象都必须有清晰而明确的概念边界,还必须有身份。 如果只提供方法的一部分,抽象既不内聚也不完整。 赋予单一而重要的职责 确保每个抽象都分配单一而重要的职责。 单一:每个抽象都应该只负责一件或一类事情。 重要:抽象不能太鸡肋。 违反抽象原则导致的坏味 我们这篇博客主要讲解分析缺失抽象坏味,对于其它抽象坏味将在后面的博客讲解分析。 缺失抽象 使用一系列数据或编码字符串,而不创建类或接口时,将引发这种坏味。 通常,由于缺失抽象,相关的数据和行为将会分散在其它抽象中,这将会导致两个问题l: 可能会向其它抽象暴露实现细节,违反封装原则 数据和相关的行为分散在不同的抽象中,可能导致实体之间高度耦合,结果是代码脆弱且难以重用 因为在创建抽象前,一定要根据应用抽象具体情况分析,再决定是否要创建抽象。 参考:《软件设计重构》

    74130发布于 2018-06-21
  • 来自专栏swag code

    抽象类与抽象方法

    在我们抽象实例对象的时候,有这样一种情况,往上层抽象时就会发现很难描述对象的属性和行为,比如“形状” ,其方法计算面积怎么计算? 好吧,形状确实是有面积的,但是又无法描述其实现方式,这种包含类我们可以抽象出一个抽象类。 抽象类由于其有可能有无法实现的方法(抽象方法),所以不能被实例化。 抽象类的特征: 1)使用abstract关键字修饰的类称为抽象类 2)抽象类不能实例化对象,原因是抽象方法无法被调用 3)有抽象方法的类肯定是抽象类,但是抽象类中不是必须有抽象方法 如果许多类都有相同的方法 不是具体的动物相信你肯定无法回答,这样我们就需要创建抽象的动物类 public abstract class Animal { }  抽象动物类 1.抽象类不能直接实例化,必须通过子类 abstract void eat();  抽象吃的方法(行为) 2.抽象方法只需声明,不需要实现 ?

    68730发布于 2018-08-20
  • 来自专栏麒思妙想

    抽象语法树为什么抽象

    从具体到抽象 Abstract Syntax Tree抽象语法树(通常被简写成AST)实际上只是一个解析树(parse tree)的一个精简版本。 AST名字中抽象一词的由来。 精简一棵解析树 我们现在知道具象语法树和抽象语法树的概念,而且知道AST是CST的精简版本,那么AST它是如何生成的呢? 我们现在知道,根据文法规则生成的解析树会非常冗余。 将操作符压进内部节点 继续把冗余的层修剪掉,我们可以得到一颗AST树 一颗抽象语法树 我们已经自己压缩了一棵解析树,通过上面几个步骤的精简,可以总结一些解析树和抽象语法树的不同之处: AST不含有语法细节 有了抽象语法树,我们基于它可以建立清晰的代码描述,非常有利于后续阶段的修改、变换。

    2.1K30发布于 2020-08-17
  • 来自专栏撸码那些事

    抽象那些事】 命令式抽象

    命令式抽象 这种坏味是由操作转换为类引起的,表现为类中只定义了一个方法,有时候类名和方法名相同。这种坏味还常常表现为方法操作的数据位于另一个类中。 为什么不能命令式抽象? 面向对象的基本原则是,识别真实世界中的事物,并使用抽象来表示它们。在解决方案域中,必须将问题域的对象表示出来,为此可采用映射域实体这一实现手法,抽象的每个类都必须封装数据和相关的方法。 只包含一个操作的类根本不是抽象,其操作的数据位于其它地方时尤其如此。这样很多操作相同数据的方法位于不同的类中,减低了类的内聚性,违反了封装和模块化原则。 命令式抽象潜在的原因 过程式思维 数据和操作这些数据的方法被封装在不同类中,典型的过程式思维。 ”坏味的类中的方法都移到Report类中,那么Report类就变成了一个恰当的抽象,同时消除了“命令式抽象”坏味。

    94280发布于 2018-05-20
  • 来自专栏跟着小郑学JAVA

    JAVA设计模式9:桥接模式,将抽象部分与实现部分分离

    在桥接模式中,抽象部分由一个抽象类或接口表示,实现部分由一个或多个具体类表示,桥接模式的关键是通过抽象类中包含一个指向实现类的引用,从而将抽象部分和实现部分分离。 首先,我们定义一个抽象类 Shape,表示形状。 当你希望抽象和具体实现可以独立扩展时,使用桥接模式。桥接模式可以将抽象和实现部分分离,使它们可以独立变化,而不会相互影响。 当一个类存在多个独立变化的维度时,使用桥接模式。 当希望在抽象部分和实现部分之间建立稳定的关联关系,并且避免在每个维度的变化中产生大量的子类时,使用桥接模式。桥接模式可以将抽象部分和实现部分分离,使得它们可以独立变化,而不会导致类爆炸问题。 窗口可以作为抽象部分,而不同操作系统的适配器可以作为实现部分。

    85941编辑于 2023-09-21
  • 来自专栏撸码那些事

    抽象那些事】命令式抽象

    命令式抽象 这种坏味是由操作转换为类引起的,表现为类中只定义了一个方法,有时候类名和方法名相同。这种坏味还常常表现为方法操作的数据位于另一个类中。 为什么不能命令式抽象? 面向对象的基本原则是,识别真实世界中的事物,并使用抽象来表示它们。在解决方案域中,必须将问题域的对象表示出来,为此可采用映射域实体这一实现手法,抽象的每个类都必须封装数据和相关的方法。 只包含一个操作的类根本不是抽象,其操作的数据位于其它地方时尤其如此。这样很多操作相同数据的方法位于不同的类中,减低了类的内聚性,违反了封装和模块化原则。 命令式抽象潜在的原因 过程式思维 数据和操作这些数据的方法被封装在不同类中,典型的过程式思维。 ”坏味的类中的方法都移到Report类中,那么Report类就变成了一个恰当的抽象,同时消除了“命令式抽象”坏味。

    48230发布于 2018-06-21
  • 来自专栏全栈开发那些事

    抽象类和抽象方法

    java中的抽象类与抽象方法 1、设计理念 2、抽象方法 3、抽象类 3.1 抽象类与普通类的区别 3.2 抽象类案例 1、设计理念   父类要体现所有子类的共同特征,在设计某些方法(行为特征或功能) 另外,只允许在抽象类和接口中声明抽象方法,否则将发生编译错误。 3、抽象类   Java规定如果一个类中包含抽象方法,则该类必须设计为抽象类。 抽象类语法格式如下: [权限修饰符] abstract class 类名{ }   抽象类也是类,所有类的成员在抽象类中都可以声明。   为什么抽象方法所在的类必须声明为抽象类呢?    如果不声明为抽象类,则此类就可以实例化,但是得到的对象对抽象方法的调用是无意义的,因为没有任何方法体。 3.1 抽象类与普通类的区别 抽象类不能直接实例化,即不能直接创建抽象类的对象。 子类继承抽象类后,如果子类不再是抽象类,那么子类必须重写抽象类的所有抽象方法,否则编译报错。

    93820编辑于 2023-02-25
  • 来自专栏全栈程序员必看

    java抽象类和抽象方法

    1.抽象的概念 2.抽象类和抽象方法的使用 1 //抽象方法和抽象类的格式: 2 /*抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束; 3 抽象类:抽象方法所在的类,必须是抽象类才行 4 5 如何使用抽象类和抽象方法 6 1.不能直接创建(new)抽象类对象 7 2.必须用一个子类来继承抽象父类 8 3.子类必须覆盖重写抽象父类当中所有的抽象方法 9 覆盖重写实现:子类去掉抽象方法的 System.out.println("普通成员方法"); 9 } 10 11 public abstract void eat(); 12 } 13 14 15 public void sleep(); 5 } 6 7 8 public abstract class Dog extends Animal{ //该子类也是抽象类,不用重写所有父类方法 9 13-16:17 4 *@Description:RedListTest 5 *@version:1.0 6 */ 7 8 import java.util.ArrayList; 9

    1.2K10编辑于 2022-09-06
  • 来自专栏运维开发王义杰

    Go:软件开发中的抽象类型温故:简化抽象、泛化抽象与分层抽象

    本文将详细探讨三种主要的抽象类型:简化抽象(Simplifying Abstraction)、泛化抽象(Generalising Abstraction)和分层抽象(Layered Abstraction 简化抽象 简化抽象的目标是通过移除系统中的不必要细节,减少动态复杂性,使系统更易于理解和使用。简化抽象通常应用于隐藏复杂实现细节,只暴露出必要的接口,从而提升系统的易用性。 总结 简化抽象、泛化抽象和分层抽象在软件开发中扮演着重要角色。 因此,需要根据具体需求和场景,灵活应用这些抽象技术,以实现最佳的设计效果。 UML 图示 为了更好地理解上述内容,我们可以使用UML绘制简化抽象、泛化抽象和分层抽象的示意图。 简化抽象示意图 泛化抽象示意图 分层抽象示意图 通过这些示意图,可以直观地看到三种抽象的实现方式和结构。 结语 希望本文对Go语言开发者在理解和应用简化抽象、泛化抽象和分层抽象方面有所帮助。

    53410编辑于 2024-05-29
领券