Q:

What's the difference between public method and abstract method in Interface?

Consider the following interface : 
public interface MyInterface {

    public void func1();
    public void func2();
    abstract public void func3();

}

and the class MyClass : 
public class MyClass implements MyInterface{

    @Override
    public void func1() {
        // TODO Auto-generated method stub

    }

    @Override
    public void func2() {
        // TODO Auto-generated method stub

    }

    @Override
    public void func3() {
        // TODO Auto-generated method stub

    }
}

What's the difference between func2() and func3() ? 
I must implement both when I want to implement MyClass , so it seems that there's no
difference if I write public or abstract public in the interface .
Thanks

A:

Java 7 and earlier:
There is no difference since all interface methods are public and "abstract." This is implied whether declared or not.
Java 8:
The same rules apply as in Java 7, however, it should be noted that since Java 8, only non-default methods are "abstract." Default methods, are in fact, allowed to have an implementation.
Java 9:
In Java 9, we are provided even more flexibility, and also allowed to have private methods.

A:

Java Language Specification quote:

Every method declaration in the body of an interface is implicitly
  abstract, so its body is always represented by a semicolon, not a
  block.

You ask

What's the difference between func2() and func3() ?

Except for the fact that they are different methods, their modifiers are the same.

