문제

I have superclass, that looks like:

 public abstract class Fish {

 protected int size;

 protected float weight;

 //constructor

 public Fish(int s, float w) {
 size = aSize;weight = aWeight;}

and I have 2 subclasses of this superclass. First one:

 public class SomeFish extends Fish{

 //constructor

 public SomeFish(int s, float w) {

 super(s, w) }

Second one:

public class AnotherFish extends Fish{

 //constructor

 public AnotherFish(int s, float w) {

 super(s, w) }

What I have to do is to write a String toString method in the Fish class, that would return something like: A 12 cm 0.5 here should be proper type of fish (AnotherFish or SomeFish). Can I do it without making string toString method abstract and implement string toString method in both SomeFish and AnotherFish classes?

도움이 되었습니까?

해결책

Refer to the class of the this instance, which will be the actual class (possibly a subclass):

public abstract class Fish {

    // rest of class omitted

    @Override
    public String toString() {
        return "A " + size + "cm, " + weight + "kg " + getClass().getSimpleName();
    }
}

The call getClass().getSimpleName() will return the String "AnotherFish" etc.

No need to define anything in a subclass to make this work.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top