请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

本节的两个疑问

老师您好,借用视频里面的代码:

class Foo {
  fun bar(p0: String, p1: Long): Any {
    TODO()
  }
}

请解释一下,如下的代码为什么会报错:

val h : (Foo,String,Long) -> Any = Foo()::bar

问题2> 老师在另一个解答中提到,
“类的函数(或者 Java 当中的方法)的调用必须通过类的实例去调用” 我对这句话有些不理解,为什么一定需要有一个实例呢?在js中,我们可以通过Foo.prototype.bar() 来调用函数,为什么Java没有Foo.bar()呢?为什么不能用类.method()的方式?为什么一定是实例.method()的方式?

正在回答 回答被采纳积分+3

4回答

qq_忘记 2023-01-15 21:59:05

https://img1.sycdn.imooc.com//szimg/63c3fe3f098a587e04210096.jpg

第一个问题你变量类型去掉,然后IDEA就会显示出变量类型,再根据视频12分钟的时候讲解的,报错就是因为类型不一致而已。

第二个问题prototype给我的感觉有点类似于groovy闭包的delegate,它是可以被修改的。我的理解就是prototype就像找张三做事,但这事儿实际上有可能是张三做的,有可能是李四做的甚至王五做的。实例调用函数就像我问张三想吃啥,只有问他的时候才知道,提前问或者问别人都不知道,实例化的时候才分配内存。静态方法就像不管张三李四还是王五,不管啥时候问,都知道他们的名字是两个字,因为自从JVM装载的时候,他们就分配了内存。

不知道这理解对吗?
0 回复 有任何疑惑可以回复我~
bennyhuo 2022-11-22 17:59:23
不用太较真,记住就行了。
0 回复 有任何疑惑可以回复我~
bennyhuo 2022-11-22 17:59:05
这就是语法设计上的差异,js不是严格意义上的oo语言,跟Java这种在设计上差异还是很大的。
0 回复 有任何疑惑可以回复我~
bennyhuo 2022-11-20 23:05:23
js当中的函数都是独立的函数,你可以给他绑一个对象,也可以不绑。java当中定义在类里面的非静态函数不是独立的,必须使用实例调用,不然就破坏了语言的设计。Java当中函数或者方法的调用能够很明确的知道this是谁,js能吗?不能吧,因为调用出没有限制。
0 回复 有任何疑惑可以回复我~
  • 提问者 慕莱坞0998854 #1
    那么 1> kotlin里面的函数也是独立的吧?可以绑定也可以不绑定。2> java中定义在类里面的静态函数是独立的吗?调用这种方法也是用 `SomeClass.SomeStaticMethod`的形式啊,这个算是"绑定了一个对象"吗?
    回复 有任何疑惑可以回复我~ 2022-11-21 01:01:04
  • 1. 定义在类里面的必须绑定。
    回复 有任何疑惑可以回复我~ 2022-11-22 17:54:37
  • 2. Java静态方法不需要实例,但实际上也是依赖于类本身的。从语法形式上,至少有作用域的限制。
    回复 有任何疑惑可以回复我~ 2022-11-22 17:56:07
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号