本节的两个疑问
来源:3-5 函数

慕莱坞0998854
2022-11-20
老师您好,借用视频里面的代码:
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()
的方式?
写回答
4回答
-
qq_忘记
2023-01-15
第一个问题你变量类型去掉,然后IDEA就会显示出变量类型,再根据视频12分钟的时候讲解的,报错就是因为类型不一致而已。
第二个问题prototype给我的感觉有点类似于groovy闭包的delegate,它是可以被修改的。我的理解就是prototype就像找张三做事,但这事儿实际上有可能是张三做的,有可能是李四做的甚至王五做的。实例调用函数就像我问张三想吃啥,只有问他的时候才知道,提前问或者问别人都不知道,实例化的时候才分配内存。静态方法就像不管张三李四还是王五,不管啥时候问,都知道他们的名字是两个字,因为自从JVM装载的时候,他们就分配了内存。
不知道这理解对吗?00 -
bennyhuo
2022-11-22
不用太较真,记住就行了。00 -
bennyhuo
2022-11-22
这就是语法设计上的差异,js不是严格意义上的oo语言,跟Java这种在设计上差异还是很大的。00 -
bennyhuo
2022-11-20
js当中的函数都是独立的函数,你可以给他绑一个对象,也可以不绑。java当中定义在类里面的非静态函数不是独立的,必须使用实例调用,不然就破坏了语言的设计。Java当中函数或者方法的调用能够很明确的知道this是谁,js能吗?不能吧,因为调用出没有限制。032022-11-22
相似问题