JavaのコードをKotlinのコードに置き換えたい
以下に示したコードの様にJavaをKotlinで置き換えてみましたが、コメントアウトを外すとコンパイルエラーになります。
Javaの方が長いので、おそらくJava風?なKotlinのコードになってしまっているかもしれませんが、どこに原因があると思われますでしょうか?
元のJavaコード
class Super {
static String x = "Super : x";
String y = "Super : y";
static void methodA() {
System.out.println("Super : methodA()");
}
void methodB() {
System.out.println("Super methodB()");
}
}
class Sub extends Super {
static String x = "Sub : x";
String y = "Sub : y";
static void methodA() {
System.out.println("Sub : methodA()");
}
void methodB() {
System.out.println("Sub : methodB()");
}
}
class Sample {
public static void main(String[] args) {
Super obj = new Sub();
System.out.println(obj.x);
System.out.println(obj.y);
obj.methodA();
obj.methodB();
}
}
Kotlinで置き換えたコード
open class Super {
open val y: String = "Super : y"
companion object {
val x: String = "Super : x"
fun methodA() {
println("Super : methodA()")
}
}
open fun methodB() {
println("Super : methodB()")
}
}
class Sub : Super() {
override val y: String = "Sub : y"
companion object {
val x: String = "Sub : x"
fun methodA() {
println("Sub : methodA()")
}
}
override fun methodB() {
println("Sub : methodB()")
}
}
fun main(args: Array<String>) {
val obj: Super = Sub()
//println(obj.x)
println(obj.y)
//obj.methodA()
obj.methodB()
}