我有一个关于面向对象编程的基本问题。
有两个类 - Class1和Class2。我需要从Class2调用Class1的getter(请参阅代码)。问题是以下呈现的代码无法编译。如何更改此代码以便能够从Class2调用Class1的getter。那么,解决这个问题的正确方法是什么?
P.S。如果我将函数getVar1
作为静态函数,编译器会说return this.var1
不正确。
public class Class1
{
private int var1;
public Class1(int index1, int index2)
{
//...
Class2 c2 = new Class2();
//..
}
public int getVar1()
{
return this.var1;
}
}
import Class1;
public Class2
{
public Class2()
{
//...
int var = Class1.getVar1(); // !!!
}
}
答案 0 :(得分:1)
Class1
的方法而不使用静态,您需要该类的实例。 如果我将函数getVar1作为静态函数,编译器就会这样说 返回this.var1不正确。
正确,因为var1
不是静态的。你会得到如下错误:
无法在静态上下文中访问非静态方法
应该给你提示。
class Class2{
//pass the instance of Class1 to Class2
public Class2(Class1 class1){
class1.getVar1(); //invoke method here
}
}
答案 1 :(得分:1)
首先public Class2
应为public class Class2
其次,如果您将getVar1
更改为静态,则还必须将var1
更改为静态(原因是您无法从静态函数直接访问非静态成员)
否则创建Class1
的实例并在该实例上调用getVar1()
答案 2 :(得分:0)
new Class1().getVar1();
在使用实例变量或方法之前,您没有创建instance.Create实例。
答案 3 :(得分:0)
我不明白你在找什么。但是暂时我做了改变。
public class Class1 {
private int var1;
public Class1() {
}
public Class1(int index1, int index2) {
// ...
Class2 c2 = new Class2();
// ..
}
public int getVar1() {
return this.var1;
}
}
import Class1;
public class Class2 {
public Class2() {
// ...
int var = new Class1().getVar1(); // !!!
}
}
答案 4 :(得分:-1)
Class1
不是静态,因此您只能通过创建实例来访问其变量和函数。
int var = new Class1.getVar();
或将class1
,getVar1
和var1
设为静态
public static class1 {
private static int var1;
public Class1(int index1, int index2) {
//...
Class2 c2 = new Class2();
//..
}
public static int getVar1() {
return var1;
}
}