[英]Java class with Interface member variable and member method behave differently. Please explain
接口和 class Number1
,后來的Number2
等。當我嘗試在方法add()
中使用成員數據時,它要求我首先將其轉換為 class 類型。 但是,如果我在方法add()
中使用成員方法,它不要求我強制轉換為 class 類型。 任何解釋將不勝感激。
下面附上代碼。
package mynums;
//Interface for all my number types, Number1, Number2 (not shown), etc
public interface NumberIF
{
public int getNum();
public void setNum(int numx);
//I will have other types of numbers not just Number1.
//I will have Number2, etc.
public void add(NumberIF f1, NumberIF f2);
public void print();
}
package mynums;
//There will be other types of numbers Number2, Number3
//all doing these operations but different.
//This is just to test the concept.
//But I have a problem here.
public class Number1 implements NumberIF
{
private int num;
public Number1()
{
num = 1;
}
public Number1(int numx)
{
num = numx;
}
public int getNum()
{
return (num);
}
public void setNum(int numx)
{
num = numx;
}
public void add(NumberIF f1, NumberIF f2)
{
int numt;
/**
* Why to use member variables I must specify the type of class.
* Why to use member method I do not have to specify type of class.
*/
//numt = f1.num + f2.num; ERROR
// either one works
//Why accessing member data is different from accessing member method.
numt = ((Number1)f1).num + ((Number1)f2).num;
numt = f1.getNum() + f2.getNum();
num = numt;
}
public void print()
{
System.out.println(num);
}
static public void main(String[] args)
{
Number1 f1, f2, f3;
f1 = new Number1(1);
f2 = new Number1(2);
f3 = new Number1(0);
f3.add(f1, f2); // 1 + 2= 3
f3.print();
}
}
Java 是一種靜態類型的語言。
NumberIF
NumberIF 類型的變量不一定指向Number1
類型的對象,因此這些對象可能沒有字段num
。
您只能使用變量的 static 類型(及其超類型)的成員。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.