实例化一个class的时候,赋值给一个变量,而变量的类型为类名,感觉class和type有点混在一起了。
1.class和type它们之间的关系到底是什么?
2.从标准库看,一个type的实现原理是什么?
//以此为例
var x:Int = 99;
class foo(val a:Int = 33)
var y:foo = foo();
个人想法:
常规理解来看就把":"后看作type就行,但是这样的话就又不好解释foo他又是个class,又不是常规的type。那么将他们都看作class,而x和y又不是类,这让我很困惑
emmm... 感觉你钻牛角尖了,这玩意儿区分它干啥?啥用都没有。
非要区分的话,它俩是两个层面上的东西。
Class(类)更多的是 OOP 里的概念,讲的是是对一类具有共同特征的事物的抽象。
Type(类型)更多的讲的是对一个对象定义的描述,它不光 OOP 里有、FP 里也有。
很绕是吧?绕就对了,绝大部分语境下两者描述的也都是一回事儿。所以当你看到一个文档里写了有 Type 和 Class,你要结合上下文去理解二者到底是有区别的还是没区别的。
举个具体的例子可能更加容易明白:
x
和y
都是Int
这个 Class 的实例,因为并不存在Int?
这种 Class;但它俩是两个 Type,即你没法把一个Int?
对象传给一个只接收Int
形参的方法。同样地也有:
Class 层面上只有
List<T>
这一个 Class,List<String>
、List<Int>
都是定义上的 Type 而不是抽象里的 Class。回到你的题目里,你的
foo
既是 Class 又是 Type,取决于你怎么看待它了。