简谈面对对象特征:继承、封装、多态

本文详细解析了面向对象编程的三大特性:封装、继承和多态。介绍了如何通过封装提高数据安全性,利用继承提升代码复用率,并阐述了多态在不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一篇博客中已经把面对对象的简单思维已经解释,现在就根据这些解释,进行面对对象编程的具体特点。

(这里只是讲解一部分编程意识想法,如果有其他建议可以在评论区中说出来)

特点1、封装

封装:(建议先百科后在看)不让外界(类外)直接调用类的字段或者私有方法进行操作,就是自定义类的字段和方法进行包装起来,然后通过类中设定的公有的方法给外界调用,从而增加一点操作数据的安全性。

  1. 封装的意识(封装好的基类,就是j2ee中的javabean)

找对象(api文档)、创建对象、怎么使用和维护对象

  1. 在Java 中的体现及步骤
  • 把类中的字段私有化;
  • 给每一个字段都提供一组getter  setter方法  (方法的规范写法);setXxx

在测试类中尝试创建对象,并通过调用getter setter方法完成 对字段的赋值和取值;

  • 提供一个无参数的构造方法

                 例子:

class.Person{

private int d;

省略getset方法(eclipse快捷方式:shitf+alt+s自动生成)、构造方法

}

特点2 继承

继承:在多个子类的基础上面抽取共有属性的行为到一个父类中去,或者从一个类延伸其他字段和方法,拥有父类属性和行为,又拥有自己的独有的东西(属性、行为);拓展对象类的设定,可以增加类的复用率,减少代码冗余

1.解析继承:

  1. 三个类都有重复的代码,可以把这部分内容 抽出去,抽出去放到另外一个类里面;上面的类我们叫做  父类(超类,基类,根类)
  2. 下面的3个类和上面的类需要发生一点关系【继承】
  3.  下面的类我们叫做 子类(派生类,拓展类)

2.意识:

在设定一些工具类时,可以根据功能延伸时通过继承再进行添加类中功能;

在设定多个对象自定义类时,可以将相同功能和字段提取出来,形成根类,规范代码的编写,增加代码的阅读的速度

(类与类、接口与接口都是可以继承的)

3.特点:

  1. java中只支持单继承
  2. 但也支持多重继承关系
  3. 没有显示的继承,那么隐式的继承Object
  4. 只能继承到父类的私有属性

4.例子:

class Fruit{

}

class Apple extends Fruit{

}

class Banana extends Fruit{

}

class Pear extends Fruit{

}

特点3 多态

前提:拥有继承关系

在父类对象中,存放子类的对象,让对象拥有多种形态变化称为多态(体现类与类之间的关系)

编译时:在java中进行编译时,对象调用的方法会先检验父类

运行时:实际调用的是子类的方法(子类没有,会向上往父类找)

1.多态解析:

  1. 编译时 :

 Fruit f = new Pear();f.getName();

  1. f 编译时,看的是父类类型,会在父类类型中getName方法
    1. 如果没有找到,会继续向上找[f编译时父类类型]
      1. 找到:编译通过
      2. 找不到:编译报错
      3. 注意:是不会向下找的[f编译时子类类型]
  2. 运行时 :
    1. 先到运行时类型[Pear]中找getName方法,
      1. 如果找到:就执行,
      2. 没找到:向上到父类中找并执行

2.意识:

  1. 在逻辑层中,尽量少使用多态(减少逻辑实现类与类之间的复杂性,多态使用过多对象,会影响自身判断)
  2. 在业务层中,尽量多使用多态(增加查看业务时类与类之间的继承关系性,可加快理解代码)

3.例子:

class Fruit{

void  getName(){}

}

class Apple extends Fruit{

void  getName(){}

}

class Banana extends Fruit{

}

class Pear extends Fruit{

}

多态:

Fruit ft = new Apple();

ft.getName();//这里调用的是Apple 类的getName()方法

之后,面对对象的介绍结束了。

 

说到这,面对对象的这三个特征,已经解析完了,这些是我自己的一些理解,肯那个有些不到位,希望不要介意,可以去评论,多谢

资源下载链接为: https://pan.quark.cn/s/140386800631 通用大模型文本分类实践的基本原理是,借助大模型自身较强的理解和推理能力,在使用时需在prompt中明确分类任务目标,并详细解释每个类目概念,尤其要突出类目间的差别。 结合in-context learning思想,有效的prompt应包含分类任务介绍及细节、类目概念解释、每个类目对应的例子和待分类文本。但实际应用中,类目和样本较多易导致prompt过长,影响大模型推理效果,因此可先通过向量检索缩小范围,再由大模型做最终决策。 具体方案为:离线时提前配置好每个类目的概念及对应样本;在线时先对给定query进行向量召回,再将召回结果交给大模型决策。 该方法不更新任何模型参数,直接使用开源模型参数。其架构参考GPT-RE并结合相关实践改写,加入上下文学习以提高准确度,还使用BGE作为向量模型,K-BERT提取文本关键词,拼接召回的相似例子作为上下文输入大模型。 代码实现上,大模型用Qwen2-7B-Instruct,Embedding采用bge-base-zh-v1.5,向量库选择milvus。分类主函数的作用是在向量库中召回相似案例,拼接prompt后输入大模型。 结果方面,使用ICL时accuracy达0.94,比bert文本分类的0.98低0.04,错误类别6个,处理时添加“家居”类别,影响不大;不使用ICL时accuracy为0.88,错误58项,可能与未修改prompt有关。 优点是无需训练即可有较好结果,例子优质、类目界限清晰时效果更佳,适合围绕通用大模型api打造工具;缺点是上限不高,仅针对一个分类任务部署大模型不划算,推理速度慢,icl的token使用多,用收费api会有额外开销。 后续可优化的点是利用key-bert提取的关键词,因为核心词语有时比语意更重要。 参考资料包括
内容概要:本文详细介绍了哈希表及其相关概念和技术细节,包括哈希表的引入、哈希函数的设计、冲突处理机制、字符串哈希的基础、哈希错误率分析以及哈希的改进与应用。哈希表作为一种高效的数据结构,通过键值对存储数据,能够快速定位和检索。文中讨论了整数键值和字符串键值的哈希方法,特别是字符串哈希中的多项式哈希及其优化方法,如双哈希和子串哈希的快速计算。此外,还探讨了常见的冲突处理方法——拉链法和闭散列法,并提供了C++实现示例。最后,文章列举了哈希在字符串匹配、最长回文子串、最长公共子字符串等问题中的具体应用。 适合人群:计算机科学专业的学生、算法竞赛选手以及有一定编程基础并对数据结构和算法感兴趣的开发者。 使用场景及目标:①理解哈希表的工作原理及其在各种编程任务中的应用;②掌握哈希函数的设计原则,包括如何选择合适的模数和基数;③学会处理哈希冲突的方法,如拉链法和闭散列法;④了解并能运用字符串哈希解决实际问题,如字符串匹配、回文检测等。 阅读建议:由于哈希涉及较多数学知识和编程技巧,建议读者先熟悉基本的数据结构和算法理论,再结合代码实例进行深入理解。同时,在实践中不断尝试不同的哈希策略,对比性能差异,从而更好地掌握哈希技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值