[#511] | project: specification | priority: low | category: bug | |
---|---|---|---|---|
submitter | assigned to | status | date submitted | |
Philippe | Martin | open | 2006-01-10 17:37:15.0 | |
subject | Is it legal to use type members of the self-type in the signature of the class? | |||
code |
abstract class C requires D { def t: T; } abstract class D extends C { type T; } class E extends D { type T = Int; def t: T = 0; } object Test { val c: C = new E; val t = c.t; } |
|||
what happened | No error. |
|||
what expected | Maybe an error. What's the type of Test.t . The analyzer infers Test.c.T but that's not a legal type as T is not a member of C . Maybe it should not be legal to use T in the signature of C members.
|
|||
[back to overview] |
Burak edited on 2006-05-28 22:21:16.0 |
Arguably, every instance of C is also an instance of D. So C is a subtype of D, and it's ok to access the members of D not only inside but also outside (the public ones).
This sort of question seems to lead a bit in the direction of C++ inheritance, which is clumsy: one can be inherit privately from a class or publicly. 'requires' resembles C++ private inheritance [C++ FAQ lite] in that one can observe a different type for this. I also think it makes sense for C to access the protected members of D. |