Re: access levels for private field which is inherited
On Sun, 13 Apr 2008 09:37:03 -0700, Mark Space wrote:
Anyway, calling super here is probably the best choice. Note than in
your example you must call super because Bar has no default constructor.
One can also provide a factory method such as newInstance below.
I want to use the factory method, but am running into a conceptual
problem with regards to packages, interfaces and casting. If I make
StudentDescriptor an interface then things would would work, or maybe a
cast? I'd like to keep StudentDescriptor an abstract class which Student
extends, and use the factory pattern.
I've seemingly painted myself into a corner with:
bcit@arrakis:~/java/src$
bcit@arrakis:~/java/src$ javac -d /home/bcit/java/prod/ -cp . a00720398/
Lab1.java a00720398/data/*.java
a00720398/Lab1.java:13: incompatible types
found : a00720398.data.StudentDescriptor
required: a00720398.data.Student
Student student = Student.newStudent();
^
1 error
bcit@arrakis:~/java/src$
bcit@arrakis:~/java/src$ cat a00720398/data/StudentDescriptor.java
package a00720398.data;
class StudentDescriptor
implements HasName, HasNumber {
private String name = MY_NAME;
private String number = MY_NUMBER;
public StudentDescriptor() {}
public static StudentDescriptor newInstance() {
return new StudentDescriptor();
}
public String getName() {
return name;
}
public String getNumber() {
return number;
}
public void setName(String name) {
this.name = name;
}
public void setNumber(String number) {
this.number = number;
}
public String toString(){
return getNumber() + ", " + getName();
}
}
bcit@arrakis:~/java/src$
bcit@arrakis:~/java/src$ cat a00720398/data/Student.java
package a00720398.data;
public class Student extends StudentDescriptor {
public static StudentDescriptor newStudent() {
return StudentDescriptor.newInstance();
}
}
bcit@arrakis:~/java/src$
thanks,
Thufir