A concrete method is one where it actually has functionallity. For example this is concrete method:
Code:
public void printSomething()
{
System.out.println("Printing a string of text characters!");
}
An
abstract or non-concrete is one where the return type, name, and arugment list are known but what the method actually does is NOT known.
Code:
void printSomething();
In this case the return type is void, the name is printSomething and the aguement list contains nothing.
Now in an interface you're basically just
describing a method. When you
implement an interface you are creating that described method. That way you are guarunteed to be able to use it, no matter how it works.
An abstract class is something completely different. It's bascially just a place holder in a hierarchy tree of classes. An abstract class can not be instantiated, but can be inherited from.
For example, if I wanted to create a two classes NumberTextBox and LetterTextBox which only except numbers or letters, respectivly, I would first create a class called TextBox which has all the
basic functionality that a text box needs, such as getting keyboard input, printing to the screen, stuff like that. But I don't want anyone to be able to use the class TextBox, just NumberTextBox and LetterTextBox.
Instead of writing the exact same basic functionality into both NumberTextBox adn LetterTextBox I would just inherit both of them from TextBox. But to ensure that people can't use TextBox I would mark that class as
abstract.
The reason an abstract class has concrete methods is because you can't inherit from a method that doesn't exist yet (i.e. a non-concrete method) because it doesn't do anything.
I hope that helps clarify it a bit. If you have any more questions just ask