Получение значения поля суперкласса

1

В следующем коде super.type значение this.type.

// http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=303&p_certName=SQ1Z0_803

class Feline {
    public String type = "f ";
    public void hh(){ System.out.print("FFFFF ");}
}


public class Cougar extends Feline {
    public void hh(){ 
        super.hh();
        this.type = "c ";
        System.out.print("CCCCC "+this.type + super.type);
    }

    public static void main(String[] args) { new Cougar().hh(); }

}

Как я могу получить значение super.type в классе потомков?

ТИА.

  • 1
    Поскольку вы расширяете класс Feline , вы переопределяете значение type , присваивая c Если вы создаете его в подклассе, вы получите значение String super.type значения, используя super.type .
  • 1
    Не принимай так быстро. Не совсем понятно, чего вы пытаетесь достичь, и ответ, который вы приняли, является «неправильным» с точки зрения объектно-ориентированного подхода. Очень редко, когда слежка за членом суперкласса является правильной вещью, и это сломает ожидания других людей о том, как ведут себя иерархии классов. Вы должны уточнить поведение, которое вы получаете, и что вы ожидаете, и почему вы думаете, что что-то не так.
Теги:
inheritance

6 ответов

-2
Лучший ответ

Если я изменю класс Cougar на

public class Cougar extends Feline {
    public String type = "c "; // <-- shadow Feline type.
    public void hh() {
        super.hh();
        // this.type = "c ";
        System.out.print("CCCCC " + this.type + super.type);
    }
}

Затем я получаю вывод, который вы, похоже, ожидаете от

FFFFF CCCCC c f 

Вместо вывода, который производит ваш код (который был)

FFFFF CCCCC c c 

Это не способ OO делать что-то, потому что Cougar - Feline. Поведение, которое вы видите (изменения стоимости в суперклассе), связано с этими отношениями. Наконец, чтобы сохранить значения разными, вам нужно будет Feline тип Feline как указано выше.

2

public String type = "f " существует в вашем суперклассе. Таким образом, он наследуется для вашего дочернего класса. Когда вы вызываете this.type = "c" То, что он делает, изменяется значение переменной типа, которое существует в суперклассе. Таким образом, результат, который вы получаете, является правильным.

2

Вы просто создаете один экземпляр Cougar, в начале, поле типа "f", однако, перед тем, как вы напечатаете super.type, вы присвоили ему значение "c".

Вы можете понять это с помощью следующего кода:

class Feline {
    public String type = "f ";
    public void hh(){ System.out.print(type);}
}


public class Cougar extends Feline {
    public void hh(){ 
        super.hh();
        this.type = "c ";
        System.out.print(this.type + super.type);
    }

    public static void main(String[] args) { new Cougar().hh(); }

}
1
How can i get the value of super.type in the descendant class ?

проблема:

this.type = "c "; //this.type will return the super.type

Вы уже ссылаетесь на значение вашего super.type на "c " таким образом печатая "c"

решение:

Вам нужно создать переменную type в классе Cougar чтобы изменить область действия this.type.

0

Я не понимаю, что вы имеете в виду. Если вы действительно хотите различать тип, вы должны объявить тип в Cougar:

public class Cougar extends Feline {
    public String type = "c ";

    ...
}
0

вы переопределили значение типа в классе Cougar. Делая это:

this.type = "c ";

Если вы хотите иметь разницу между super.type и this.type, добавьте поле с типом имени в Cougar тоже.

public class Cougar extends Feline {
    public String type = ""; //add this
    public void hh(){ 
        super.hh();
        this.type = "c ";
        System.out.print("CCCCC "+this.type + super.type);
    }

    public static void main(String[] args) { new Cougar().hh(); }

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню