Jis*_*soo 1 java inheritance overriding kotlin
我试图覆盖 kotlin 类中的 java 属性变量,但不断收到错误“myVar 不覆盖任何内容”。这里有如何重写 kotlin 类的示例,但它没有说明有关重写 java 属性的任何内容。这是代码:
//Java
public class myBaseClass{
protected String myVar = "hello";
public myBaseClass(){
}
protected void myOneMethod(){
System.out.println(myVar);
}
}
//Kotlin
class myChildClass() : myBaseClass() {
override var myVar = "hi"
override fun myOneMethod()
{
System.out.println(myVar)
}
}
Run Code Online (Sandbox Code Playgroud)
由于 Java 没有属性,因此您需要将字段设为私有并提供 getter 和 setter。然后在 Kotlin 中,您可以重写 getter 和 setter。这并不漂亮,但这也是您在 Java 子类中必须这样做的方式。您需要另一个私有属性来为子类实现创建新的支持字段。
public class MyBaseClass {
private String myVar = "hello";
public MyBaseClass(){
}
protected String getMyVar() {
return myVar;
}
protected void setMyVar(String myVar) {
this.myVar = myVar;
}
protected void myOneMethod(){
System.out.println(getMyVar());
}
}
Run Code Online (Sandbox Code Playgroud)
class MyChildClass : MyBaseClass() {
private var overriddenMyVar: String? = "hi"
override fun getMyVar(): String? {
return overriddenMyVar
}
override fun setMyVar(myVar: String?) {
overriddenMyVar = myVar
}
}
Run Code Online (Sandbox Code Playgroud)
fun main() {
val x : MyBaseClass = MyChildClass()
x.myOneMethod() // Prints "hi"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2460 次 |
| 最近记录: |