Well, I'm pretty sure that Java isn't telling that. You should always paste the exact error message.
That said, your setter initializes the argument of the setter with the value of the field, instead of initializing the field with the value of the argument.
It should be:
void setAuthor (Author Writer) {
this.writer = Writer;
}
You should respect the Java naming conventions, and be consistent in your naming. Variables start with a lowercase letter. They naver contain an underscore and are camelCased: firstName
, lastName
, etc. And using this.xxx = xxx
in a systematic way in setters allow avoiding those kinds of bug.
It also seems like you have a design problem. Why would an author have an author? A book should have an author. But an author shouldn't have an author.