Есть ли способ переопределить переменные класса в Java?

Для отладки вы можете использовать профилировщик (например, YourKit, коммерческий профилировщик java). Вы найдете как открытые, так и коммерческие варианты профилей java.

Для интеграции с вашим кодом вы можете использовать технику «Аспектно-ориентированное программирование». Рамки AOP (например, AspectWerkz) позволяют изменять файлы классов во время загрузки класса. Это позволит вам модифицировать конструкторы для регистрации объектов в «все-мои-runtime-objects-framework».

144
задан James P. 6 April 2012 в 12:57
поделиться

6 ответов

только путем переопределения printMe():

class Son extends Dad 
{
    public void printMe() 
    {
        System.out.println("son");
    }
}

ссылка на me в Dad.printMe метод неявно указывает на статическое поле Dad.me, так так или иначе Вы изменяетесь что printMe выполняет Son...

2
ответ дан 23 November 2019 в 22:11
поделиться

Вы не можете переопределить переменные в классе. Можно переопределить только методы. Необходимо сохранить переменные частными иначе, можно получить много проблем.

2
ответ дан 23 November 2019 в 22:11
поделиться

Это похоже на недостаток дизайна.

Удалите статическое ключевое слово и установите переменную, например, в конструкторе. Таким образом, Сын просто устанавливает переменную на другое значение в его конструкторе.

6
ответ дан 23 November 2019 в 22:11
поделиться

Да, просто переопределите printMe() метод:

class Son extends Dad {
        public static final String me = "son";

        @Override
        public void printMe() {
                System.out.println(me);
        }
}
31
ответ дан 23 November 2019 в 22:11
поделиться

Просто Вызов super.variable в sub конструкторе класса

public abstract class Beverage {

int cost;


int getCost() {

    return cost;

}

}`

public class Coffee extends Beverage {


int cost = 10;
Coffee(){
    super.cost = cost;
}


}`

public class Driver {

public static void main(String[] args) {

    Beverage coffee = new Coffee();

    System.out.println(coffee.getCost());

}

}

Вывод равняется 10.

0
ответ дан 23 November 2019 в 22:11
поделиться

Короче говоря, нет, нет способа переопределить переменную класса.

Вы не переопределяете переменные класса в Java, вы их скрываете. Переопределение - это, например, методы. Скрытие отличается от переопределения.

В приведенном вами примере, объявляя переменную класса с именем «я» в классе «Сын», вы скрываете переменную класса, которую она унаследовала бы от своего суперкласса «Папа» с тем же именем «я». Такое скрытие переменной не влияет на значение переменной класса «me» в суперклассе Dad.

Что касается второй части вашего вопроса, то о том, как заставить его печатать «сын», я бы установил значение через конструктор. Хотя приведенный ниже код довольно сильно отличается от вашего исходного вопроса, я бы написал его примерно так:

public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public void printName() {
        System.out.println(name);
    }
}

JLS дает гораздо больше подробностей о сокрытии в разделе 8.3 - Объявления полей

94
ответ дан 23 November 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: