如何在kotlin中重写java类属性变量
我试图在我的kotlin类中重写java属性变量,但一直出现错误“myVar不重写任何内容”。如何重写kotlin类的示例是,但它没有说明任何关于重写java属性的内容。代码如下:如何在kotlin中重写java类属性变量,java,kotlin,inheritance,overriding,Java,Kotlin,Inheritance,Overriding,我试图在我的kotlin类中重写java属性变量,但一直出现错误“myVar不重写任何内容”。如何重写kotlin类的示例是,但它没有说明任何关于重写java属性的内容。代码如下: //Java public class myBaseClass{ protected String myVar = "hello"; public myBaseClass(){ } protected void myOneMethod(){ Sy
//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)
}
}
Java中的字段不能以任何方式重写。因为
myVar
是Java中的一个字段,所以不能在Kotlin中重写它。因为Java没有属性,所以需要将该字段设置为私有字段,并提供一个getter和setter。然后在Kotlin中,可以重写getter和setter。这并不漂亮,但在Java子类中也必须这样做。您需要另一个私有属性来为子类实现创建新的支持字段
公共类MyBaseClass{
私有字符串myVar=“hello”;
公共MyBaseClass(){
}
受保护的字符串getMyVar(){
返回myVar;
}
受保护的void setMyVar(字符串myVar){
this.myVar=myVar;
}
保护空位法(){
System.out.println(getMyVar());
}
}
class MyChildClass:MyBaseClass(){
私有变量重写了MyVar:字符串?=“嗨”
重写getMyVar():字符串{
返回重写的denmyvar
}
重写fun setMyVar(myVar:String?){
overridedenmyvar=myVar
}
}
fun main(){
val x:MyBaseClass=MyChildClass()
x、 myOneMethod()//打印“hi”
}
试着这样做:
//Kotlin
class KotlinImplementation: MyBaseClass() {
init {
myVar = "ji"
}
}
//Java
public class MyBaseClass {
protected String myVar = "hello";
public MyBaseClass(){
}
protected void myOneMethod(){
System.out.println(myVar);
}
}
看起来是Java互操作中的一个问题 下面是一个解决方法:
受保护的字段:
公共类myBaseClassKtInterop扩展了myBaseClass{
私有字符串myVar;
}
class myChildClass:myBaseClassKtInterop(){
var myVar=“hi”
公共方法(){
println(myVar)
}
}
现在,访问myVar
的两种方法都起作用了:
myChildClass().myOneMethod()//嗨
println(myChildClass().myVar)//hi
还请注意,如果有其他方法访问
myBaseClass
中的myVar
,则它们将使用“hello”
值。考虑将它们全部重写,或者在<代码> MyBaseCass(如果可能的话)中改变<代码> MyVa< /Cult>可见性> <代码>私下<代码>,在这种情况下,您将不需要这个辅助类。考虑为<代码> MyVa<代码>创建一个吸气剂和设置器,仍然存在相同的错误: