如果A类扩展了B类,如何将B类变量传递给A类

时间:2016-04-07 11:45:34

标签: java

在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;
}
}

4 个答案:

答案 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。