10_面对对象高级_抽象类

MOOS-ivp 实验三 MOOS简介(1) 系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例 阅读详情

抽象类

1. 认识抽象类

在 Java 中有一个关键字叫:abstract ,它的中文含义是"抽象",可以用它来修饰类、成员方法。

abstract 修饰类,这个类就是抽象类。

abstract 修饰方法,这个方法就是抽象方法。

2. 注意事项
  • 抽象类中不一定有抽象方法,但是,有抽象方法的类一定是抽象类
  • 类该有的成员(成员变量、成员方法、构造器)抽象类都可以有
  • 最大的特点:抽象类不能创建对象!它仅作为一种特殊的父类,让子类继承并实现重写!
abstract class A {
    private String name;
    public static String schoolName = "New School";

    public A() {

    }

    public A(String name) {
        this.name = name;
    }

    // A类独有的方法
    public String getName() {
        return name;
    }

    // A类非独有的方法:被B类继承
    public void printOut() {
        System.out.println("通过'普通的模式'的继承实现多态 [from A]");
    }

    // "抽象方法"实现了哪些东西?
    // 1. 父类不用写大括号{},以及对应的代码,因为写了也没意义,交给子类进行重构就好啦!
    // 2. 强制要求子类,必须对当前的这个抽象方法进行重构,否则子类也会被同化成抽象类!
    // 3. 综上所述,抽象类与抽象方法最终只是为了让子类强制执行重构,以实现更好的"多态"
    // 所以,不使用抽象类来打造"多态"也是可以的,但是显得不那么专业。
    public abstract void run();
    // 如果使用普通的模式让子类进行重构,从而实现"多态",上面的代码则应该改成——如下所示:
//  public void run(){
//
//  }
}

class B extends A {
    // 调用A类的构造器
    public B(String name) {
        super(name);
    }

    // B类独有的方法
    public void helloWorld() {
        System.out.println("Hello World");
    }

    // 继承A类的方法,普通的模式进行继承,实现多态
    @Override
    public void printOut() {
        System.out.println("通过'普通的模式'的继承实现多态 [from B]");
    }

    // 当B类继承了A类,
    // 要么选择: 将A类中的抽象方法run()进行重构,
    // 要么选择: B类也变成抽象类,
    // 要么选择: 程序报错!
    public void run() {
        System.out.println("B类: 正在跑步...");
    }
}

public class HelloWorld {

    public static void main(String[] args) {
//      A obj = new A();  // 报错,A类是抽象类,无法创建对象
        A obj = new B("Jack");  // 正常

        System.out.println(obj.schoolName);  // (A类的属性[或者说成员变量])
        System.out.println(obj.getName());  // (A类的独有方法)
        obj.printOut();  // (B类的方法:它是重写了A类的)
//      obj.helloWorld();  // 报错  (B类的独有方法)

        // 执行结果:
        // New School
        // Jack
        // 通过'普通的模式'的继承实现多态 [from B]

    }
}
3. 抽象类的意义

抽象类的应用场景和好处是,父类知道每个子类都要做某个行为,但是在每个子类中要做的情况不一样,父类就定义成抽象方法,交给子类去强制重写。我们抽象出这样的抽象类,就是为了更好的支持多态。

4. 抽象类的应用

4.1 模板方法设计模式

  • 抽象类的常见应用场景:模板方法设计模式
  • 模板方法设计模式:解决了方法中存在重复代码的问题

4.2 写法

  • 定义一个抽象类
  • 在里面定义两个方法
    • 一个是模板方法:把需要重复使用的代码放进去
    • 一个是抽象方法:具体的功能实现交给子类完成
abstract class People {
    // 没有被继承的成员方法
    // 像这种不需要被继承的方法,强烈建议加上 final 关键字,以防止不小心被重写了!
    public final void speak() {
        System.out.println("这个人正在台上演讲...");
        System.out.println(speakMain());
        System.out.println("这个人演讲结束啦");
    }

    // 抽象方法
    public abstract String speakMain();
}

class Teacher extends People {
    //  以Teacher风格,重写抽象方法
    public String speakMain() {
        return "这个人是老师,演讲的内容很有深度!";
    }
}

class Student extends People {
    //  以Student风格,重写抽象方法
    public String speakMain() {
        return "这个人是学生,在台上演讲有点紧张。";
    }
}


public class Test {
    public static void main(String[] args) {
        People p1 = new Teacher();
        People p2 = new Student();
        p1.speak();
        System.out.println("-------------------------");
        p2.speak();
    }
}

// 运行结果:

//这个人正在台上演讲...
//这个人是老师,演讲的内容很有深度!
//这个人演讲结束啦
//-------------------------
//这个人正在台上演讲...
//这个人是学生,在台上演讲有点紧张。
//这个人演讲结束啦
SPICE仿真软件:PSpice_(10).噪声分析 噪声分析是电路设计和优化中的一个重要工具,特别是在低噪声放大器、传感器电路和通信电路中。通过准确设置噪声源和仿真参数,合理选择频率范围,并验证仿真结果,可以有效地评估和优化电路的噪声性能。PSpice提供的噪声分析功能强大且灵活,能够帮助工程师和研究人员在多种应用场景下进行详细的噪声分析。 阅读详情

相关推荐

QTableView为例:Qt模型视图委托(MVD)(Model-View-Delegate)

QT中的MVD(模型-视图-委托)模式是一种类似于MVC的设计模式,将数据、界面和交互逻辑分离。模型负责数据管理,视图负责显示界面,而委托则嵌入在视图中处理数据的显示和编辑。QT提供了多种视图组件(如QListView、QTreeView、QTableView)和模型类(如QStandardItemModel、QAbstractItemModel),支持数据的多样化呈现。委托(Delegate)通过定制显示和编辑行为增强了视图的灵活性。该模式适用于各类数据结构展示(列表、表格、树形),能够高效处理数据与界面

菜一头包的博客 1988

PHP高级面对对象

PHP高级面对对象 面对对象三大特性: 封装 继承 多态 封装 : 将数据与对数据的操作绑定到一起 对外界隐蔽 对外部提供可以操作的方法 继承: 面对对象思想中实现代码重复利用的重要特性. 多态: 类继承条件下 同时出现方法下的重写 父类对象对于子类对象的引用 让一个对象同时拥有两种状态 PHP中不支持多态. ...

雪球滚起来的博客 446

【STABLE_BASELINE3】强化学习算法实战:模型的保存,读取,再训练

STABLE-BASELINE3,模型读取,再训练:有时候需要在已经训练好的模型基础上进行再次训练。

Kiek17的博客 4867

Java面对对象高级

权限修饰符] interface接口名[extends 其他的接口名]{[public static final] 数据类型 常量名=常量值;public default 返回值类型 方法名([参数列表]){//方法体[public abstract] 返回值类型 方法名([参数列表]);

zmhwtyydlz的博客 795

从d、q轴电流到电机性能:FOC控制中角度偏移的实战影响与调试策略

本文深入探讨了永磁同步电机FOC控制中d、q轴电流与角度偏移对电机性能的影响及调试策略。通过分析角度偏移导致的效率下降、电流异常等问题,提供了实用的四步调试法和参数优化技巧,帮助工程师有效提升电机控制精度和效率。

weixin_29264201的博客 294

iOS WKWebView H5微信支付跳转

iOS WKWebView H5微信支付跳转 需求:iOS客户端实现嵌入H5进行微信支付跳转到微信客户端,支付完成后再跳转回我们的APP,解决WKWebView无法跳转回APP的BUG. 阅读前提: 了解WKWebView基本初始化及使用 了解如何利用URL Schemes进行应用间跳转 公司或个人已经在微信后台注册了一级域名 GitHub地址(附代码) :iOS WKWebView H5微信支付跳转 简书地址 :iOS WKWebView H5微信支付跳转 博客地址 :iOS WKWe...

ForeverMyheart的博客 2046

面对对象高级

在Java中子类可以继承父类中的方法,而不需要重新声明相同的方法,当父类中的方法无法满足子类需求或子类具有特定功能的时候,需要对方法进行重写。方法的重写(override)又称为方法的覆盖,要求子类中的方法与父类中的方法具有同的方法名、返回值类型和参数列表,但方法体实现不同。Java中的继承与现实生活中的继承相似,现实生活中子女继承父母的财产, Java中的子类继承父类中可继承的属性和方法,子类也可以添加父类中没有的属性和方法或重写父类中的某些方法,扩展或者强化子类所继承的各项功能。

2501_90860257的博客 372

CocosCreator3.8.2实战:5分钟搞定多分辨率适配与横竖屏自动翻转(附完整Demo)

本文针对CocosCreator3.8.2开发者,提供了一套5分钟快速集成、开箱即用的多分辨率屏幕适配与横竖屏自动翻转解决方案。通过封装好的ScreenAdapter组件,开发者无需处理复杂计算,即可实现等比缩放或拉伸全屏两种主流适配模式,并自动响应设备旋转,有效解决移动端UI在不同屏幕比例和方向下的显示问题。文末附完整Demo。

z4a5b6的博客 723

java面对对象高级

(1)不管调用哪个构造器,创建对象时,都会先调用代码块的内容,再生成 构造器;即代码块调用的顺序优先于构造器!一般来说,抽象类会被其子类继承并实现具体方法;*注:抽象方法不能有方法体;抽象类不能被实例化;抽象类可以没有抽象方法,但抽象方法一定要在抽象类中 *(1)局部内部类(2)匿名内部类(重要!!!基于接口的匿名内部类举例基于类的匿名内部类匿名内部类的使用注意事项匿名内部类的常用实践举例System.out.println("懒猪起床了");});

renxiaoyaxiaotia的博客 828

DSSAD自动驾驶行车记录系统体系结构和应用

通过对其感知、决策、控制等模块的详细研究,以及对商业化和消费市场发展趋势的分析,为该领域的研究和实践提供有价值的参考。通过克服技术、安全与隐私、法规与政策等方面的挑战,并紧跟人工智能、云端服务、用户体验等发展趋势,DSSAD系统将更好地适应自动驾驶行业的发展,提供更安全、智能、便捷的驾驶辅助服务。DSSAD体系结构通过数据收集模块、加密链接和数据存储模块和数据读取模块等关键模块的协同作用,构建了一个强大而灵活的自动驾驶数据记录系统,为未来智能出行提供了坚实的技术基础。

一只老虎的专栏 2207

TC3XX - MCAL知识点(三十三):基于EB Tresos配置Tc3xx的MCAL代码如何产生中心对称的三相六路发波波形

本文用于记录如何在英飞凌 tc3xx 芯片的应用开发中,借助 EB Tresos 配置工具生成的配置代码与 MCAL 源码相结合,进而实现三相六路中心对称互补的 PWM 输出效果。外部资源需求:EB Tresos23.0以上、Tasking\Hightec编译器、示波器\逻辑分析仪。

梦想技术家 1210

面对对象编程(高级)——抽象类

父类方法的不确定性 小结:当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类 //即:父类方法不确定性的问题 //====>考虑将该方法设计为抽象(abstract)方法 //====>所谓抽象方法就是没有实现的方法 //====>所谓没有实现就是指,没有方法体 //====>当一个类中存在抽象方法时,需要将该类声明为abstract类 //====>一般来说,抽象类会被继承,有其子类来实现抽象方法 快速入门 当父类的一些方法不能

ieno_的博客 268

YOLOv13添加DRB模块map暴涨12.33!准确率提升8.56!召回率提升15.66

本文介绍了在YOLOv13模型中添加DRB模块的改进方法。实验结果显示,添加DRB模块后模型性能显著提升,mAP暴涨12.33%,准确率提升8.56%。文章详细说明了移植过程,包括创建yolov13-DRB.yaml配置文件、修改tasks.py和__init__.py文件,以及引入UniRepLKNet模块的具体实现。其中重点描述了GRNwithNHWC、NCHWtoNHWC等核心组件的实现细节,并提供了完整的模型结构配置代码。这些改进使得YOLOv13模型在保持原有架构优势的同时,获得了更强大的特征提取

FJN110的博客 2819

42-面对对象编程(高级部分)1

类变量,类方法,main方法,代码块,单例设计模式,final关键字,抽象类,抽象模板设计

m0_68516464的博客 408

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【java】【面对对象高级3】多态 + final + 抽象类 + 接口

多态是在继承/实现情况下一种现象,表现形式为:对象多态、行为多态。

春天的波菜 324

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C++面对对象编程进阶(2)

面对对象编程进阶(2) 6.多态与虚函数 隐藏 覆盖 7.纯虚函数与抽象类 8.子类的析构函数与虚析构函数 普通析构函数 虚析构函数 总结

weixin_54929649的博客 1237

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

面对对象(高级)

设计模式是在大量的‘实践中总结’和‘理论化’之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式免去我们自己再思考和摸索。就像是经典的棋谱,不同的棋局,我们用不同的棋谱。"套路”经典的设计模式一共有23种。//季节的名称//季节的描述public static final Season SPRING = new Season("春天", "春暖花开");public static final Season SUMMER = new Season("夏天", "夏日炎炎");

2401_87607742的博客 898

面对对象

1、类里面有三种成员:属性(普通属性,静态属性),方法(普通方法,静态方法,魔术方法( __construct,__destruct,__set,__get,__isset,__unset,_call,__callStatic,__sleep,__wakeup,__clone )),常量(访问权限为public),属性和方法可以加访问权限修饰符(public,protected,pr...

weixin_30387423的博客 64

从0到1学java:面对对象的高级特性

/ 前言 / 面向对象OOP是基于面向过程而言,面向对象简单来说就是将功能封装到对象(数据和操作结合)里,我们面向对象,让对象去完成这些功能。万物皆对象。 (在我们程序员眼中,一切皆对象) 理解面向对象,经典案例:把大象塞进冰箱 面向过程的做法:1.打开冰箱门 2.把大象塞进去 3.关闭冰箱门 当有两个不同的人用不同的方法实现这样的步骤,我们需要为不同的人量身定做不同解决事情的方法。 面向对象,找个对象帮你做事 我们把冰箱作为对象,1.冰箱门...

微信公z号: 罗晓胜,分享技术干货和有趣视频​ 145

面对对象语言面试

半科班的好惨 面对对象与面对过程区别

night李的博客 446

C#面对对象高级特性详解

面对对象三大特点:封装,继承,多态 一、封装:就是将数据或函数等封装在类中 封装的意义在于保护或者防止代码(数据)被我们无意中破坏。 二、继承:现有类的基础上创建新类的过程,现有类称为基类或父类,新类称为派生类或子类 派生类是对基类的扩展,除了获得基类除构造函数与析构函数外的所有成员,还可以自身添加新的成员,基类中成员的访问方式决定派生类能否访问它们。 继承的优点是可以代码重用 继承的特性: 1.继承的可传递性:类B从类A中派生,类C又从类B中派生,类C继承了类B和类A的成员 2.继承的单一性: 一个派生

ciyudadi的博客 221

面对对象易错点总结

面对对象 1.面对对象思想 1.1面对对象思想:面对对象是面对过程来讲的,指的是把相关的数据和方法组织为一个整体来看待。《Java编程思想》中提到“万物皆为对象”的概念。它将对象视为一种奇特的变量,它除了可以存储数据之外还可以对它自身进行操作。每个对象都具有各自的属性及方法,java就是通过对象之间行为的交互来解决问题的。 1.2面对对象的三大特征:封装性 继承性 多态性 2.类与对象 2.1类由属性和方法构成 2.2.java文件的文件名称必须与public修饰的类名完全一致 2.3在同一个包内类的名称不

qq_54934564的博客 222

Java 面对对象(下)

面向对象

QHBfuture的博客 1393

面对对象进阶2.0

将共性的行为(方法)抽取到父类之后,由于每个子类执行的内容是不一样,所以。在父类中不能确定具体的方法体,该方法就可以定义为抽象方法。final 修饰的变量是引用类型:那么变量存储的地址值不能发生改变,对象内部的可以改变。包名的规则:公司域名反写 + 包的作用,需要全部英文小写,见名知意。如果方法中的代码时抽取其他方法中共性代码,这个方法一般也私有。使用 java.lang 包中的类时,不需要导包。抽象类中不一定有抽象方法,有抽象方法的一定是抽象类。使用其它类的规则:使用其他类时,需要使用全类名。

unbelievable2048的博客 846

第四章 面对对象的高级知识

1.继承性 子类被称为派生类,父类又被称为超类。 1)java不允许多重继承,但允许多层继承。(但一般不超过三层,太多了过于复杂) 2)子类在继承父类时严格来讲会继承全部的操作,但对于所有的私有操作属于隐式继承,而非私有操作属于显式继承。(对于从父类中继承的私有属性,子类不能够直接进行操作,而只能依靠setter和getter来进行操作) 3)子类对象在构造前一定会默认调用父类的构造函数(默认使用...

新世界博客 246

6.3Java面对对象(下)

文章目录面对对象(下)-2final关键字static关键字抽象类接口包和导包权限修饰符 面对对象(下)-2 final关键字 static关键字 抽象类 接口 包和导包 权限修饰符 ...

264
上一篇: 09_面向对象高级_final与常量
下一篇: 11_面对对象高级_接口
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值