Каталог статей
Что нужно знать заранее
Механизм родительского делегирования
В этой статье предполагается, что вы уже понимаете механизм загрузки классов
, особенно механизм родительского делегирования.
Если вы еще этого не знаете, вы можете щелкнуть ссылку ниже, чтобы посмотреть.
Статья о механизме загрузки классов
Неявный вызов
Мы уже знаем, что в соответствии с механизмом родительского делегирования, когда мы вызываем класс, мы сначала загружаем его родительский класс.Этот процесс загрузки его родительского класса называется неявным вызовом.
явный вызов
Использование ключевых слов this и super называется явным вызовом
Знания указывают на то, что нужно сказать в этой статье
Ключевое слово this в конструкторе представляет объект Java, который в данный момент инициализируется.
Возьмем пример
отец
package java_this;
public class father {
private String dec;
public father() {
this.dec=getDec();
}
public String getDec(){
return "this is father";
}
public String toString(){
return dec;
}
}
В конструкторе родительского класса мы используем ключевое слово this и пишем метод
getDec() , который перегружается дочерним классом.
Подкласс
package java_this;
public class son extends father{
private String name;
private double weight;
public son(String name,double weight){
this.name=name;
this.weight=weight;
}
@Override
//我们重写了这个方法 父类的方法只return了一个"this is father"
public String getDec(){
return "the son name="+name+" weight="+weight;
}
public static void main(String[] args) {
System.out.println(new son("wxt",80));
}
}
результат
Почему на нашем входе что-то есть, а на выходе пусто?
Мы могли бы также нарисовать картинку в конструкторе, чтобы дать нам понять,
потому что загрузчик класса сначала загружает родительский класс, а конструктор родительского класса вызывает this.dec=getDec();
но теперь мы сын() этого класса Внутри, это вызывает getDec() сына
, а метод getDec() возвращает "the son name="+name+" weight="+weight;" при выполнении.
По данному примеру мы видим, что в крайнем случае родительский класс может вызвать метод подкласса
Давайте изменим код, чтобы вызвать метод подкласса