Класс Java с переменной-членом интерфейса и методом-членом ведут себя по-разному. Пожалуйста, объясни - PullRequest
0 голосов
/ 23 февраля 2020

Интерфейс и класс Number1, позже Number2, et c. Когда я пытаюсь использовать данные члена внутри метода add(), он требует, чтобы я сначала преобразовал их в тип класса. Однако, если я использую метод-член внутри метода add(), он не требует, чтобы я приводил к типу класса. Любое объяснение будет оценено.

Код ниже прилагается.


    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();
    }
}

1 Ответ

0 голосов
/ 23 февраля 2020

Java является статически типизированным языком.

Переменные типа c типа NumberIF не обязательно указывают на объекты типа Number1, поэтому эти объекты может не иметь поля num.

Вы можете использовать только члены типа stati c (и его супертипы) переменной.

...