Java抽象类(此关键字)
我想我误解了什么,如果是这样,我需要帮助 假设我有以下两个类:Java抽象类(此关键字),java,android,Java,Android,我想我误解了什么,如果是这样,我需要帮助 假设我有以下两个类: public abstract class Abstraction() { protected int number = 0; public void printNumber() { System.out.println(this.number); System.out.println(getNumber()); } public int getNumber() {
public abstract class Abstraction() {
protected int number = 0;
public void printNumber() {
System.out.println(this.number);
System.out.println(getNumber());
}
public int getNumber() {
return this.number();
}
}
public class Reality extends Abstraction {
int number = 1;
public Reality() {
this.printNumber();
}
}
// some other class
new Reality();
输出应该是什么?我得到了0,0(这里的代码有点复杂,但仍然是相同的问题)。
如何使输出为1,1?在
Reality
类中的number
不会覆盖抽象类中的number
。因此,抽象
类仍然将自己的number
值视为0
解决办法是:
public class Reality extends Abstraction {
public Reality() {
number = 1;
this.printNumber();
}
}
由于抽象中的数字
受到保护,因此您可以在Reality
类中访问它
另一个示例是方法中的参数:
private int number;
public void myMethod(int number){
number = 2;
}
您的private int number
字段不会被设置,相反,参数number
将被设置为2
最后,关于this
和super
关键字的一个词,请参见您的类编辑:
public abstract class Abstraction() {
protected int number = 0;
public void printNumber() {
System.out.println(this.number);
System.out.println(getNumber());
}
public int getNumber() {
return this.number();
}
}
public class Reality extends Abstraction {
int number = 1;
public Reality() {
System.out.println(number); //Will print 1
System.out.println(this.number); //Will print 1
System.out.println(super.number); //Will print 0
}
}
您正在Reality
中创建一个局部变量,但是printNumber()
方法引用的成员变量仍然是0
如果您不创建本地变量,而是使用字段,如下所示:
number = 1;
会好的
如果您在理解字段时遇到问题,您可以参考官方文档,该文档可在此处找到:您可以在抽象类中创建setter方法:
public void setNumber(int value) {
this.number = value;
}
你试图实现这一点的方法是行不通的,因为变量并没有超过超类的要求
我希望这有帮助
public class Reality extends Abstraction {
int number = 1;
public Reality() {
this.printNumber();
}
}
代码number
上方是classReality
的实例变量和超类的调用方法。在super类中,printNumber()
方法将打印number
0的值,因为它是用0初始化的
如果要获取number
的子类变量值,必须将值作为方法参数传递,如下所示:
public Reality(int num) {
this.printNumber();
}