Модераторы: LSD, AntonSaburov
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> super 
V
    Опции темы
Syltan
Дата 18.5.2010, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: нет
Всего: -2



Не могу понять зачем нужно ипользовать ключевое слово super.
Вот пробую что-то писать не выходит. Подскжаите, как правльно допистаь мой код ,чтоб увидеть зачем нужно это ключевое слово.
Код

package proga10;
import java.math.*;
 
class Apelsin{
    int a,b;
 Apelsin(int x, int y){}    
}

class salo extends Apelsin{
    this.a=5; this.b=10;
    super();
}
        

public class Main {
  public static void main(String[] args) {
     System.out.println();
      
    }

}


PM MAIL   Вверх
Nofate
Дата 18.5.2010, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 13.10.2008

Репутация: 4
Всего: 8



Super позволяет обращаться к членам родительского класса. Соответственно super() - вызов конструктора родителя.

Код

class Apelsin{
   public Apelsin() {
      System.out.println("Апельсин создан");
   }

   public void eat() {
      System.out.println("Апельсин съеден");
  }
}

class Salo extends Apelsin{
   public Salo() {
      super();
      System.out.println("Еще создано сало");
   }

  public void eat() {
      System.out.println("Сало съедено");
  }

  public void eatParent() {
      System.out.println("Сегодня на обед что-то другое. ");
      super.eat();
  }
}
        
public class Main {
  public static void main(String[] args) {
        Salo salo = new Salo();
        salo.eat();
        salo.eatParent(); 
    }
}




Это сообщение отредактировал(а) Nofate - 18.5.2010, 19:31


--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
Syltan
Дата 18.5.2010, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: нет
Всего: -2



super.eat();   вот эта строчка какого именно класса вызовет метод eat()?

Растолкуйте пожалуйста смысл вашего кода. Заранее благодарю.

Добавлено через 4 минуты и 39 секунд
Скажите почему 1 одинаковый метода 1-ый в классе-родителе ,а второй в классе-потомке?

Добавлено через 8 минут и 39 секунд
Объявляется в классе-потомке, с таким же именем метод как в классе-родителе,почему?

Добавлено через 11 минут и 11 секунд
Если можно, напишите с параметрами пример
PM MAIL   Вверх
Nofate
Дата 18.5.2010, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 13.10.2008

Репутация: 4
Всего: 8



Метод в классе-потомке объявляется таким же как в родителе, с целью переопределить его. 
Т.е. для экземпляров класса Apelsin при вызове eat будет выводиться "Апельсин съеден", при вызове eat для экземпляров класса Salo - "Сало съедено". Если же возникает необходимость из дочернего класса вызвать метод родительского класса, который уже переопределен в дочернем - используется ключевое слово super. 
Можно провести аналогию с ключевым словом this. This - ссылка на сам объект, super - на члены родительского класса для этого объекта.

При использовании со скобками super() происходит вызов конструктора из родительского класса.

Таким образом, записанная выше программа (разумеется нужно рассовать классы по файлам и добавить нужные импорты) выведет следующее:

Апельсин создан                               - работа конструктора класса Apelsin, вызванного из конструктора класса Salo
Еще создано сало                            - работа конструктора класса Apelsin, вызванного из конструктора класса Salo
Сало съедено                                   - работа метода eat класса Salo
Сегодня на обед что-то другое.      - работа метода eatParent класса Salo
Апельсин съеден                               - работа метода eat класса Apelsin. Метод был вызван из Salo.eatParent() при помощи ключевого слова super

Собственно речь идет о самых основах ООП, в частности о наследовании и полиморфизме. Очень важно их усвоить, чтобы двигаться дальше. 
Рекомендую почитать литературу на эту тему, чтобы четко для себя все разложить по полочкам. 


--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
Syltan
Дата 19.5.2010, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: нет
Всего: -2



На чужом примере это хорошо, но хочется на своём. Вот попробовал ещё так ,выводит вообще нули ,чё так, как исправить?
Код

package proga10;
import java.math.*;

class Apelsin{
    int a,b;
 Apelsin(int x, int y){}
}

class salo extends Apelsin{
        public salo(){
        super(5, 10);
        this.a=5; this.b=10;

        }
}


public class Main {
  public static void main(String[] args) {
     Apelsin r=new Apelsin(9,36);
      System.out.println(r.a+" "+r.b);

    }

}

PM MAIL   Вверх
jManiak
Дата 19.5.2010, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 6.2.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 1



У тебя в main нигде не создается и не вызывается объект класса salo. Только апельсин. И чего ты от него хочешь? У него пустой конструктор которому на вход передаются два числа и он с ними ничего не делает, т.е. эти числа даже не записываются в свойства объекта.

Чего хочешь добиться-то?

Добавлено через 9 минут и 39 секунд
Вот тебе примерчик на твоем:

Код

package testsalo;

/**
 *
 * @author maniak
 */
public class Main {

    static class Apelsin {

        int a, b;

        Apelsin(int x, int y) {
            this.a = x;
            this.b = y;
        }
    }

    static class salo extends Apelsin {

        public salo() {
            super(5, 10);
            System.out.println("From parent: " + a + " " + b);
            this.a = 1;
            this.b = 2;
            System.out.println("From myself: " + a + " " + b);
        }
    }

    public static void main(String[] args) {
        new salo();
    }
}


Здесь при создании потомка вызывается конструктор родителя который присваивает значения 5 и 10, все это выводится в консоль, 
затем те же свойства задаются локально в конструкторе класса-потомка. И опять же выводим результаты.

Чтобы нагляднее это просмотреть предлагаю запустить программу пошагово, при этом повесив a и b в WatchList. Так будет сразу видно когда и что меняется.
PM MAIL ICQ   Вверх
Syltan
Дата 19.5.2010, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: нет
Всего: -2



Скажите а зачем перед названием класса писать static?

Добавлено через 1 минуту и 45 секунд
И ещё вот такое что означает?
Код

new salo();

PM MAIL   Вверх
LSD
Дата 19.5.2010, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Syltan @ 19.5.2010,  13:58)
Скажите а зачем перед названием класса писать static?

Добавлено @ 13:00
И ещё вот такое что означает?
Код

new salo();

Модератор: Пожалуйста, один топик - один вопрос. И на такие элементарные вопросы есть ответы в любой приличной книге! Потрудись хоть какую нибудь литературу почитать!




--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Nofate
Дата 19.5.2010, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 13.10.2008

Репутация: 4
Всего: 8



new salo(); - создает экземпляр класса salo. Т.е. вызывает его конструктор и возвращает экземпляр.

PS. Имена классов принято задавать с большой буквы, чтобы не путать с членами и переменными.

static перед объявление класса значит что он статический. Для чего такие классы используются можно прочитать здесь, например: http://www.quizful.net/post/inner-classes-java.


--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
Syltan
Дата 19.5.2010, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: нет
Всего: -2



Пробую создать внука, и что-то код перестаёт работать.
Код

package proga10;
import java.math.*;

public class Main {

    static class Apelsin {

        int a, b;

        Apelsin(int x, int y) {
            this.a = x;
            this.b = y;
           }
    }

    static class salo extends Apelsin {

        public salo() {
            
            
            super(5, 10);
            System.out.println("From parent: " + a + " " + b);
            this.a = 1;
            this.b = 2;
            System.out.println("From myself: " + a + " " + b);
        }
        
        public int ona(int c1, int c2,int c3)
        {
            this.a=c1;
            this.b=c2;
            return ona;
        }
  
    }
            
    public  class vino extends salo()
  {
       super(9,3);
       System.out.println("Result: " + a + " " + b);
  }
    }

     
    public static void main(String[] args) {
        
              new salo();
    }
}




Вопрос ещё, метод super он должен постоянно находится внутри констурктора класса-потомка,чтоб вызвать метод или констуртор класса-родителя или необязательно?


PM MAIL   Вверх
jManiak
Дата 19.5.2010, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 6.2.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 1



А вот это: 
Код

 public  class vino extends salo()
  {
       super(9,3);
       System.out.println("Result: " + a + " " + b);
  }

Вообще на каком языке написано???

Предлагаю вам для начала взять ЛЮБУЮ книгу для начинающих по Java и прочитать хотя-бы первые пару глав.
PM MAIL ICQ   Вверх
Syltan
Дата 19.5.2010, 21:11 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: нет
Всего: -2



Ответьте пожалуйста на вопрос, помогите исправить код. Заранее благодарю, я хочу сделать есперимент с внуком.
PM MAIL   Вверх
jManiak
Дата 19.5.2010, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 6.2.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Вы сейчас пытаетесь управлять машиной не зная как крутить руль. Вы его пытаетесь на себя тянуть, а не крутить, и удивляетесь что машина не взлетает.
Потратив 2 часа времени изучая первый главы книги для начинающих вы сэкономите себе кучу времени проведенного на форумах, интересуясь почему же руль не тянется на себя.
Серьезно.
И так как пошел уже флуд, если что - в ПМ.
PM MAIL ICQ   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0980 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.