As of c, I am also confused. In fact a program below
protected void finalize()
public static void main(String args)
TestFinalize tf = new TestFinalize();
runs fine, no errors.
However, the java tutorial, last paragraph says that http://java.sun.com/docs/books/tutorial/java/javaOO/garbagecollection.html
"If you override finalize, then your implementation of the method
should call super.finalize as the last thing it does"