在A类中扩展B类,现在我在A类中打印变量a的值。我得到的结果是a = 0。我怎样才能得到值a = 2
A类
package testing;
public class ClassA extends ClassB {
public void print(){
System.out.println("a= " +a);
}
public static void main(String arg[]){
ClassA ca = new ClassA();
ca.print();
}
}
B类
package testing;
public class ClassB {
int a;
public void send(){
a=2;
}
}
答案 0 :(得分:1)
最初a
的值为0
,因为您尚未将其设置为任何内容,默认情况下,当您调用new ClassA();
时,它会初始化为0.因此,您获得{ {1}}作为输出。
您需要调用0
方法,将send
的值设置为a
。
2
答案 1 :(得分:1)
理解在类之间解析变量的另一种更简单的方法是使用get-set方法。
A类编码:
@grid.GetHtml(
htmlAttributes: new { id="productSearchGrid" },
mode:WebGridPagerModes.All,
tableStyle: "table table-hover table-bordered table-responsive",
columns: grid.Columns(
grid.Column("ID", "Product ID", style: "span1", canSort: true),
grid.Column("ProductTypeDescription", "Product Type", style: "span2", canSort: true),
grid.Column("ProductName", "Product Name", style: "span2", canSort: true),
grid.Column("Price", "Current Price", format: (item) => String.Format("{0:C}", @item.Price), style: "span2", canSort: true),
grid.Column("EffectiveDate", "Effective Date", (format: (item) => (item.EffectiveDate != DateTime.MinValue && item.EffectiveDate
!= null ? new HtmlString(
item.EffectiveDate.ToString("yyyy-MM-dd")
).ToString() : new HtmlString("---").ToString())), style: "span2", canSort: false),
grid.Column("TerminateDate", "Terminate Date", (format: (item) => (item.TerminateDate != DateTime.MinValue && item.TerminateDate
!= null ? @Html.Raw(("<span id='' title='" + item.Price + "'>" + item.TerminateDate.ToString("yyyy-MM-dd")
).ToString() + "</span>") : new HtmlString("---").ToString())), style: "span2", canSort: false),
grid.Column("Select", format: (item) =>
new HtmlString(
Html.ActionLink("Select", "AddOrEditProduct", "Product", new
{
productID = item.ID
}, null).ToString()
)
)
)
)
}
B类编码:
public class ClassA extends ClassB {
public static void main (String [] args)
{
ClassB ClassBValue = new ClassB();
System.out.println(ClassBValue.getA());
}
希望这有帮助
答案 2 :(得分:0)
您正在调用ca.print()
而没有为其分配任何值,因此基本上它正在为int
a打印初始值为0。
在打印功能之前调用send()
,编译器将首先检查ClassA
中的函数发送,当它在那里找不到时它将调用SuperClass的发送函数,即B,这将为您的变量a赋值'2',当您调用print()
时,调用A类中的打印函数,现在A类没有名为a的变量,因此变量a的值从它的超级调用上课,你将得到2印的价值。
代码看起来应该像 - &gt;
public class ClassA extends ClassB {
public void print(){
System.out.println("a= " +a);
}
public static void main(String arg[]){
ClassA ca = new ClassA();
ca.send();
ca.print();
}
}
public class ClassB {
int a;
public void send(){
a=2;
}
}
答案 3 :(得分:0)
默认情况下,您的int变量初始化为0。
一些选项:
A)更改主要方法以调用send方法
ClassA ca = new ClassA();
ca.send(); //set the value to 2
ca.print();
B)如果不想改变你的主方法(出于任何原因),你可以将变量初始化移动到类construtor:
ClassA() {
a = 2
}
现在,当你实例化你的类(新的ClassA())时,'a'将等于2。