You can absolutely have an "abstract data type" in Java without declaring the class "abstract", and/or without creating an interface.
The difference between an "abstract class" and an "interface" in Java is definite - but fairly subtle. The practical bottom line is:
1. For every class, you'll want that class to do one, distinct thing, and do it well.
Every class will always have a definite purpose, and a clear "interface".
2. Your first choice will generally be "inheritance" (e.g. the canonical "class circle extends shape")
Inheritance always expresses an "is-a" relationship (a "circle" unquestionably IS-A "shape")
3. You may declare the top-level ancestor class "abstract", but you usually don't have to.
4. In Java, you'll usually find yourself using "interfaces" when C++ programmers might be looking at "abstract classes" or (ugh!) "multiple inheritance".
If you're curious (and/or if none of stuff I've been babbling makes any sense whatsoever), I'd strongly encourage you to get a copy of Bruce Eckel's (brilliant!):
http://www.bookpool.com/sm/0131002872
Your .. PSM
PS:
You can implement ADT's in any language. OO languages simply offer (much!) better support. But I would argue that the Linux device driver API and the Unix standard I/O libraries both offer excellent examples of ADT's in C.
Here's a worthwhile link on ATD's:
http://en.wikipedia.org/wiki/Abstract_data_type