小编Ask*_*ker的帖子

Java中的继承和重载

我正在攻读考试,我需要一些帮助才能理解以下剪辑代码中发生了什么.

class A {
    public void method1(A X) {
        System.out.println("A");
    }
}
class B extends A {
    public void method2() {
        System.out.println("B");
    }
}
class C extends B {
    public void method1(A x) {
        System.out.println("C");
    }
}
class D extends C {
    public void method1(D x) {
        System.out.println("D");
    }
}
public class test {
    public static void main(String[] args) {
        C c = new D();
        B b = c;
        c.method1(c);  // prints C
        b.method1(b);  // prints C
    }
}
Run Code Online (Sandbox Code Playgroud)

好吧,这就是我的想法:c.method1(c)在C中调用method1而在D中调用method1,因为c作为C是decleard,因此D中的method1不可见.但是b.method1(b)更难.B没有method1,我假设将使用超类中的method1,但事实并非如此.为什么在C中使用该方法?我在B中添加了一个新的D但是D的特化没有任何可见,因为b来自B型.

java methods inheritance invoke

6
推荐指数
2
解决办法
847
查看次数

基于 DFA 的 Knuth-Morris-Pratt 算法`?

我想了解 Knuth\xe2\x80\x93Morris\xe2\x80\x93Pratt 算法的工作原理。我在普林斯顿大学观看了本教程https://www.youtube.com/watch?v=iZ93Unvxwtw。在此视频中,他们使用一个表格,其中字母表长度 = 行数,模式长度 = 列数。将该表视为 DFA,用于检测文本中的模式。我认为这种方法很有趣,但维基百科说 Knuth\xe2\x80\x93Morris\xe2\x80\x93Pratt 算法使用一个前缀表,其中只有一行前缀的长度。两者都有效,并且两者的速度都是 O(n+m)(n 是文本的长度,m 是模式的长度)。但DFA版本需要更多空间。但问题是哪个是真正的 Knuth\xe2\x80\x93Morris\xe2\x80\x93Pratt 算法,哪个是微分?

\n

algorithm knuth dfa

5
推荐指数
1
解决办法
715
查看次数

Haskell类型和签名

我正在学习关于Haskell的考试.我不明白我如何确定函数的类型.功能是:

func [] f = 16
func (h : t) f = (f h) + (func t f)
Run Code Online (Sandbox Code Playgroud)

我的猜测是第一行有这种类型:empty list -> a -> awhere a必须是数字类型.在Haskell表示法中Num a => [] -> a -> a,第二行有这种类型:[a]-> a -> ?它返回什么?也许(a, a)因为 (f h)是一个元组.怎么样(func t f),是a或?我如何将两条线混合在一起?

haskell types integer functional-programming

2
推荐指数
1
解决办法
82
查看次数