具有接口成员变量和成员方法的Java类的行为不同。请解释一下
接口和类具有接口成员变量和成员方法的Java类的行为不同。请解释一下,java,interface,polymorphism,class-members,Java,Interface,Polymorphism,Class Members,接口和类Number1,后面的Number2,等等。 当我尝试在方法add()中使用成员数据时,它要求我首先将其强制转换为类类型。 然而,如果我在方法add()中使用成员方法,它并不要求我强制转换为类类型。 如有任何解释,将不胜感激 代码见附件 Java是一种静态类型语言 静态类型NumberIF的变量不一定指向类型Number1的对象,因此这些对象可能没有字段num 您只能使用变量的静态类型(及其超类型)的成员。f1的类型为NumberIF,其中没有成员private int num@mar
Number1
,后面的Number2
,等等。
当我尝试在方法add()
中使用成员数据时,它要求我首先将其强制转换为类类型。
然而,如果我在方法add()
中使用成员方法,它并不要求我强制转换为类类型。
如有任何解释,将不胜感激
代码见附件
Java是一种静态类型语言 静态类型
NumberIF
的变量不一定指向类型Number1
的对象,因此这些对象可能没有字段num
您只能使用变量的静态类型(及其超类型)的成员。
f1
的类型为NumberIF
,其中没有成员private int num
@markspace。请验证我的理解和语言。我不能执行f1.num,因为(numberrif type)没有成员变量num。但一旦我将其转换为Number1,我就可以执行((Number1)f1.num,bc Number1有.num。我可以做f1.getNum(),bc接口NumberIF有getNum()//虽然它只是半生不熟//,即抽象未实现。谢谢它的帮助。我想我不能让你的答案成为“精选答案”,因为我的名声不好。两个答案都有帮助。如果你知道我如何选择这个作为答案,你可以给我发送私人电子邮件,以便我下次知道。
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();
}
}