-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmasking1.kat
46 lines (44 loc) · 1022 Bytes
/
masking1.kat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class A() is {
var v: Integer
def f() : Integer := this.v
def A() is { this.v := 1; }
}
class A2() extends A is {
var v: String
def g() : String := this.v
def A2() : A() is { this.v := "coucou"; }
}
class A3() extends A2 is {
var v: Integer
def h() : Integer := this.v
def override f() : Integer := this.v
def k() is {
((A this).v).toString().println();
((A2 this).v).println();
this.v.toString().println();
}
def A3() : A2() is { this.v := 5; }
}
class A4() extends A3 is {
def z() : Integer := this.v
def A4() : A3() is { }
}
{
monA3 : A3
monA4 : A4
monA : A
is
monA3 := new A3();
monA4 := new A4();
monA := new A();
monA3.f().toString().println();
/* le cast est une notion statique, doit donner le meme resultat
* le cast recherche une fonction f() depuis A2 et tombe sur la signature
* de f() dans A.
*/
(A monA3).f().toString().println();
monA3.g().println();
monA3.h().toString().println();
monA3.k();
monA4.z().toString().println();
}