2015-01-13 3 views
1

У меня есть эти два класса:Как получить значение подкласса из метода суперкласса в Java?

Class A 
{ 
    public int max = 100; 

    public int getMax() 
    { 
    return max; 
    } 
} 



Class B extends A 
{ 
    public int max = 200; 
} 

Я пишу следующий код:

A clsA = new A(); 
B clsB = new B(); 


valA = clsA.getMax(); 
valB = clsB.getMax(); 

Вала 100 valB 100 раз

Как я могу написать код, который clsB.getMax(); возвращает 200?

+0

вы даже не переопределить метод getMax() в ClassB, почему вы ожидаете получить 200? он выполнит оригинальный метод, так как нет другого, объявленного для переопределения его в классе B. –

+1

смотрите здесь http://www.tutorialspoint.com/java/java_overriding.htm –

+0

[Этот ответ] (http://stackoverflow.com/questions/12086298/why-instance-variable-of-super-class-is- не-переопределенный-под-класс-метод) также должны помочь – sanbhat

ответ

6

Вы можете переопределить getMax в классе B:

@Override 
    public int getMax() 
    { 
    return max; 
    } 

Хотя, в общем, это плохая идея, чтобы иметь переменные с тем же именем в супер класса и подкласса.

Обратите внимание, что после изменения, следующий будет также возвращать 200:

A clsB = new B(); 
valB = clsB.getMax(); 
2

переопределять метод getMax в B:

class B extends A 
{ 
    public int max = 200; 

    public int getMax() 
    { 
     return max; 
    } 
} 

В методе газопоглощающей, return max; эквивалентно return this.max, где this ссылается на текущий экземпляр B. С другой стороны, вызов return super.max возвращает значение поля max, указанное в родительском подклассе.

0

Вы должны добавить метод getMax() в класс B. Реализация может быть такой же, как в классе А

@Overwrite 
public int getMax() 
{ 
    return max; 
} 

Когда вы НЕ перезаписать метод один из B вызова метода родительского getMax(). И родитель Metod getMax() возвращает 150

0

Попробуйте метод Переопределение

В Java, в "ближайший метод" будет называться. Поскольку clsB расширяет A, но не имеет собственного определения getMax(), будет вызываться версия getMax(). Однако, поскольку clsB также разделяет переменные A, getMax (вызываемый из класса A) возвращает номер класса A.

Решение? добавить

public int getMax() 
{ 
    return max; 
} 

к классу B.

2

короткий ответ, что вы не можете изменить элементы в подклассах, как вы пытаетесь. То, что вы должны сделать, это сделать B напрямую изменить значение max.Что-то вроде этого:

class B extends A 
{ 
    public B() 
    { 
     max = 200; 
    } 
} 
0

Реализовать метод коррекция концепция

@Override 
    public int getMax() 
    { 
    return max; 
    } 

Замещение происходит во время выполнения

A clsB = new B(); 
valB = clsB.getMax(); 

Надеется, что это должно работать.

0

Java не поддерживает отмену любых переменных в классе.

У вас может быть два способа сделать это.

  1. передать переменную через конструктор. Я предлагаю сделать это, потому что, если метод выполняет одно и то же действие. Переопределяя это и делая это снова, это плохая практика.

    Class A { public int max = 100; public A(int maxVal) { this.max=maxVal; } public int getMax(){ return max; } } B clsB = new B(); A clsA = new A(clsB.max);

  2. Override метод

    @override public int getMax(){ max=200; //do the job. }

Смежные вопросы