我需要为内部类创建一个接口吗?

时间:2012-11-17 10:19:51

标签: java

我刚学习java中的接口及其意义,是否有必要为内部类创建一个接口,例如我在下面创建的程序?本课程的目的只是成为一个模糊的政府原型以及它如何以最简单的形式运作。我创建了几种添加法律,参议员和国会议员的方法。这段代码是否适用于我想要完成的任务?

public class usaGov
{

private int sizeOfSenate = 105;
private int sizeOfCongress = 308;
private int amtOfLaws = 0;
private int law = 0;

void addSenateMember(int numberOfSenators)
{        
        sizeOfSenate = sizeOfSenate + numberOfSenators;
}

void addCongressMember(int numberOfCongressMembers)
{
    sizeOfCongress = sizeOfCongress + numberOfCongressMembers;
}    

void removeSenateMember(int numberOfSenators)
{        
       sizeOfSenate = sizeOfSenate - numberOfSenators;   
}

void removeCongressMember (int numberOfCongressMembers)
{
    sizeOfCongress = sizeOfCongress - numberOfCongressMembers;
}

void passLaw()
{
    if (law == 3)
    {
        amtOfLaws++;
    }

}

private class Senate 
{
void senateYes()
{
    int yes = 1; 
    law = law + yes;
}
void senateNo()
{
    int no = -1;
    law = law + no;
}

}
private class Congress
{ 
void congressYes()
{
    int yes = 1;
    law = law + yes;
}
void congressNo()
{
    int no = -1;
    law = law + no;
}
}
private class President
{
void presidentYes()
{
    int yes = 1;
    law = law + yes;
}
void presidentNo()
{
    int no = -1;
    law = law + no;
}
}    


}

这是我的界面:

public interface americanGov
{
void addSenateMember(int numberOfSenators);

void addCongressMember(int numberOfCongressMembers);

void removeSenateMember(int numberOfSenators);

void removeCongressMember (int numberOfCongressMembers);
}

3 个答案:

答案 0 :(得分:2)

当你在某个时候想要获得多重继承时,你只需需要来使用接口:

在Java中,类只能扩展另一个类,但它可以实现多个接口。

接口的任何其他用途都是最佳实践和代码设计。

经验法则是:如果将来某个人(包括您自己)想要编写同一事物的替代插入式实现,请使用接口

内部类通常不属于此类,除非您知道您将拥有相同内容的多个内部实现。所以在这里使用接口可能会过度。

答案 1 :(得分:0)

在您的情况下,所有法律投票共享相同的代码。通过仅使用一个类进行所有投票,您可以显着缩短和简化代码:

public class USAGOV {

    private VotingBody senate = new VotingBody(105);
    private VotingBody congress = new VotingBody(305);
    private VotingBody president = new VotingBody(1);

    void passLaw() {
        //logic to count votes from senate, congress and president
    }

    private class VotingBody {
        int members;
        int law;

        VotingBody(int members){
            this.members = members;
        }

        int getSize() {
            return members;
        }

        void voteYes() {
            int yes = 1;
            law = law + yes;
        }

        void voteNo() {
            int no = -1;
            law = law + no;
        }

        void addMembers(int members){
            this.members += members;
        }

        void removeMembers(int members){
            this.members -= members;
        }

    }
}

答案 2 :(得分:0)

您已创建界面但未实现该界面。如果你不实现它将没有用。 接口是抽象类,可用于实现多重继承,或者如果要强制实现接口的类来定义其中的函数。这些是界面的两个主要用途。