在接口java中重写方法

时间:2014-08-06 12:58:53

标签: java netbeans

我用Java编写了一个接口。 之后,我尝试通过覆盖来实现它,如代码中所示。 但是我得到错误,我必须在方法之前添加公共。

  

为什么我要公开?为什么没有公开它不起作用?

正如Net-Beans所说:“试图分配较弱的访问权限;是公开的”

代码:

    package tryinginterface;
interface Bicycle {

    //  wheel revolutions per minute
    void changeCadence(int newValue);

    void changeGear(int newValue);

    void speedUp(int increment);

    void applyBrakes(int decrement);
}


class ACMEBicycle implements Bicycle {

    int cadence = 0;
    int speed = 0;
    int gear = 1;
    @Override 
        void changeCadence(int newValue) {
         cadence = newValue;
    }
    @Override
    void changeGear(int newValue) {
         gear = newValue;
    }
    @Override
    void speedUp(int increment) {
         speed = speed + increment;   
    }
    @Override
    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }
    @Override
    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }
}

3 个答案:

答案 0 :(得分:8)

接口中的所有方法都是公开的。

没有可见性修饰符的类中的所有方法都是package-private。

您无法将公共方法的可见性降低到package-private,因为它违反了接口。

答案 1 :(得分:3)

因为在界面中,默认情况下所有方法都是公开,而在类中,方法的默认可见性是“friend” - 在同一个包中看到。

在实施方法时,您无法缩小可见性,这是​​规则。

答案 2 :(得分:0)

让我们假设您有一个接口Printable,其中包含方法print()。

interface Printable{
   int MIN=5;
   void print();
}

现在因为该方法是在接口中声明的,所以编译器会在该方法之前隐式添加公共摘要。 像这样 :- interface for compiler

现在,由于该方法被声明为public,因此,当您扩展该方法时,必须在该方法之前添加public。

我认为这可能会对您有所帮助。

相关问题