在Interface java中重写方法



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

为什么我必须添加public ?为什么没有public就不行呢?

正如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);
    }
}

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

类中没有可见性修饰符的所有方法都是包私有的。

你不能将public方法的可见性降低为package-private,因为它违反了接口。

因为在接口中,所有方法默认都是public,而在类中,方法的默认可见性是"friend"——在同一个包中可见。

你不能在实现一个方法时缩小可见性,这是规则。

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

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

现在因为方法是在接口内部声明的,所以编译器会在方法之前隐式地添加公共抽象。像这样:编译器接口

现在作为方法被声明为public,所以现在当你扩展方法时,你必须在方法之前添加public。

我想这可能对你有帮助。

最新更新