imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 01.09.2005, 18:59     # 1
Sam Dark
Member
 
Аватар для Sam Dark
 
Регистрация: 03.07.2003
Адрес: Voronezh, Russia
Пол: Male
Сообщения: 294

Sam Dark МолодецSam Dark МолодецSam Dark Молодец
Java. Проблема с классами.

Проблема в следующем: у класса reader не виден метод read.

Код:
public class reader
{
  
  public static Vector read(String fileName, String charsetName)
  {
     ...
  }

  public static Vector read(String fileName)
  {
     ...
  }
}
__________________
Это жжжж неспроста...
Sam Dark вне форума  
Старый 01.09.2005, 23:43     # 2
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
1. Не может быть! Как ты его пытаешься вызвать...
2. оформлять Java код таким образом - не культурно Классы нужно называть с большой буквы. Желательно чтобы имя класса, даже если он в пакете, не дублировало имени класса из стандартных пакеджей (это я про "reader")...
Код:
1)
public class MyFileReader  :biggrin: {  
    
    public static Vector read(String fileName, String charsetName) {
         return new Vector();
    }
}

2) из другого класса дергается

MyFileReader.read(fileName, encoding);
если нет, то проверь заимпортен ли соответсвующий пакет с этим классом...

Надеюсь ты не в нотпаде пишешь
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
/7y3uK вне форума  
Старый 02.09.2005, 00:05     # 3
Trotil
Advanced Member
 
Аватар для Trotil
 
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431

Trotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собой
В книге "Секреты программирования на Java" читаю буквально следующее:
Цитата:
Модификатор static позволяет сделать метод доступным даже в том случае, когда клас, к которому он принадлежит, не реализован. Методы, объявленные статическими, неявным образом используют также модификатор final - иными словами, переопределить статический метод невозможно.
Если действительно так, тогда понятно, почему код не работает. НО! Во всех других источниках этого не указано и следовательно с точки зрения синтаксиса все верно.
Trotil вне форума  
Старый 02.09.2005, 11:05     # 4
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
Я бы сказал, что понимать это нужно не совсем так

1) Когда вы пишете просто public класс, то в любом случае можете создать объект через new , т.к. у любого объекта есть дефолтный конструктор без параметров... ну и соответственно можете получить через экземпляр класса доступ ко всем public методам и филдам... Обычно такие классы, в которых лежат только паблик методы, называют x...xTools, но это несколько не укладывается в ООП, т.к. возвращает нас к процедурному программированию... Если необходимо использовать в нескольких классах одни и те же ститк файнал филды, то для этого обычно делают интерфейс, в котором они описываются, и имплементят в классы, в которых необходимо использовать одни и те же данные... Но это имеес тмысл, если таких классов больше чем 2

2) Модификатор static подразумевает следующее: все статик филды будут существовать в единственном экзмпляре в рамках одного процесса (это очень грубо говоря), т.е. если в каком-то объекте есть статический филд static String s = "stroka", то соответственно можно не создавая объект получить ссылку на этот филд и работать с ним, т.о. он будет один и тот же для всех эеземпляров этого класса - в одном экземпляре поменяли значение - поменялся для всех - именно так обычно делают кэширование некоторых переменных... надо быть осторожным Что касается статических методов, то ту все тоже самое - метод можно дергать не создавая экземпляров класса... Но при этом никто! не запрещает его перекрыть у наследника... Ведь вызывается-то он через имя класса, а не через созданый объект...

3) Что касается модификатора final - необходимо понимать, что этот модификатор не позволяет изменить только ССЫЛКУ на объект, но отнюдь не блокирует для изменения содержимое этого объекта, к примеру содержимое public static final Map myMap = new HashMap(); всегда можно поменять - тут тоже необходимо быть осторожным и понимать что делаешь
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
/7y3uK вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 06:23.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.