Kotlin声明[类型]的方式是通过实现接口还是继承类?

实例化一个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又不是类,这让我很困惑

阅读 1.2k
1 个回答

emmm... 感觉你钻牛角尖了,这玩意儿区分它干啥?啥用都没有。

非要区分的话,它俩是两个层面上的东西。

Class(类)更多的是 OOP 里的概念,讲的是是对一类具有共同特征的事物的抽象。

Type(类型)更多的讲的是对一个对象定义的描述,它不光 OOP 里有、FP 里也有。

很绕是吧?绕就对了,绝大部分语境下两者描述的也都是一回事儿。所以当你看到一个文档里写了有 Type 和 Class,你要结合上下文去理解二者到底是有区别的还是没区别的。


举个具体的例子可能更加容易明白:

var x: Int = 0;
var y: Int? = 0;

xy 都是 Int 这个 Class 的实例,因为并不存在 Int? 这种 Class;但它俩是两个 Type,即你没法把一个 Int? 对象传给一个只接收 Int 形参的方法。

同样地也有:

var l1: List<String>;
var l2: List<Int>;

Class 层面上只有 List<T> 这一个 Class,List<String>List<Int> 都是定义上的 Type 而不是抽象里的 Class。


回到你的题目里,你的 foo 既是 Class 又是 Type,取决于你怎么看待它了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏