边儿上的小人您要嫌碍事儿,可将鼠标放在上头,边上底下有个叉,点一下就收起来了

面向对象思想2【笔记】

面向对象思想

PS:类似于这种list<T.>,请将最后的.给去除掉

继承

继承的关系就是一种is-a的关系

子类增加或修改基类(增加成员变量,函数)

java中所有函数都相当于c++中的虚函数

封装

默认也称package private

尽量只使用private和public

派生类中修改封装可见性

比如private改成public或者是public变成private,这是不建议使用的

不可变性

不可变对象 immutable objects

可以引用传递,可以缓存

线程安全

final关键字的使用

在类申明中,类不可以被继承

函数申明,函数不可以在派生类中重写

变量申明,变量不可以指向其他对象

Static final变量,用于定义变量,名称一般大写

实现不可变性

使用final关键字无法保证不可变性

从接口定义,类的实现上保证不可变性

泛型

以list为例,有很多种类型

一般来说,类型很多的话,可能就是建错了

从list到list<T.>

规定list中的元素只能是类型T

ArrayList<integer.>,ArrayList<string.>

Linkedlist<integer.>,linkedlist<string.>

虽然规定了只能是类型T,但是在实现的时候无所谓T是什么类型,但是要告诉T到底是什么类型,然后保证其中的元素的类型,这就是泛型的情况

语法方面


Java type erasure

早期java是没有泛型的

为了兼容性,在运行的时候会将所有的泛型内容erase,泛型单纯就是给编译器看的

运行的时候,list,list<string.>,list<integer.>,这三个是没有区别的

运行的时候怎么知道泛型的类型?

比如有

不清楚的话可以换一个方法

删掉了以后编译器可以保证,那么编译器是怎么保证的,这里有一个概念covariance,是有一些反直觉的

ArrayList<integer.>是list<integer.>吗?答案是,是的

那么list<integer.>是list<object.>吗?答案是,不是的

将list<integer.>转换成list<object.>的方法

第一个,new ArrayList<object.>(intlist)

第二个,强制转换,很危险可能会丢失数据,但是也可以,所以要先想想为什么要转换

泛型中对于c++的虚函数表(没有类型,就是一内存块)

java开发者来说,是理解面向对象的具体实现

对于c++开发来说,虚函数表是很重要的

对于c++和java来说,可以理解这两种设计语言的不同之处

例如


End

posted @   DbWong_0918  阅读(54)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示