Классы Java против классов C ++ - PullRequest
4 голосов
/ 20 июня 2011

Я только начал учиться разрабатывать для Android, и я пришел из строго C ++ фона. Я обнаружил, что Java не поддерживает множественное наследование, но нужно ли создавать отдельный файл .java для каждой новой операции?

У меня есть TabActivity, и есть еще 3 действия, которые составляют вкладки. Я хочу создать представление списка на одной из вкладок, но я начинаю путаться. Нужно ли мне сделать еще один файл .java, который расширяет ListActivity? Я могу видеть, что даже относительно небольшое приложение становится очень большим, если мне нужно будет создать отдельный файл .java для каждого действия.

ПОБОЧНОЕ ПРИМЕЧАНИЕ

Если я хочу добавить ListView на одну из моих вкладок, как бы я это сделал? Ничто из того, что я нашел до сих пор, не упоминает, как добавить новые виды деятельности в другие виды деятельности.

Ответы [ 7 ]

1 голос
/ 20 июня 2011

Другие ответы дают хорошие отзывы об интерфейсах, и это, вероятно, больше, что вы ищете.Тем не менее, для получения дополнительной информации, нет необходимости создавать новый файл .java для каждого нового класса, есть альтернативы .Тем не менее, имейте в виду, что больше классов не обязательно плохо.Возможны следующие варианты: *

Вложенный класс:

public class A {

    public/private class B {

    }

}

Экземпляры B могут обращаться к частным переменным A, но не могут быть созданы без экземпляра A (этоэто подход, часто используемый для обработчиков кнопок и т. д.)

Вложенный статический класс:

public class A {

    public/private static class B {

    }

}

Экземпляры B не могут получить доступ к закрытым переменным A, но они нетребуют, чтобы экземпляр A был построен.Экземпляры B могут быть созданы где угодно, если B объявлен как public, или только в методах A, если B объявлен как private.

Анонимный класс:

public class A {

    private void setupLayout() {

        ...
        button.addClickListener(new ActionListener() {
            public void actionPerfored(ActionEvent e)
            {
                handleClick();   
            }
        });
    }

}

Это странноСинтаксис создает класс, который не имеет имени и функционирует так же, как вложенный класс (например, может обращаться к закрытым переменным).Это альтернативная форма написания вложенных классов, которая иногда короче, но приводит к очень странному синтаксису.

1 голос
/ 20 июня 2011

Java не допускает множественное наследование. Но это позволяет реализовать несколько interface с. Вам не нужно создавать отдельный файл для каждого class (хотя это хорошая практика). Вы можете инкапсулировать подклассы в основной файл class вашего файла.

ListView может быть просто extend ed, и вы можете использовать соответствующий расширенный класс в XML и т. Д.

1 голос
/ 20 июня 2011

Java не поддерживает множественное наследование

Временное решение: вы используете интерфейсы

, но нужно ли создавать отдельный файл .java для каждого новогоУпражнение

Нет, если ваша деятельность может быть выполнена в существующем классе или может быть подклассифицирована в существующем классе.Java строится вокруг создания классов для каждого вида деятельности.

1 голос
/ 20 июня 2011

Если вы используете IDE для этого, накладные расходы на создание большого количества файлов будут намного меньше.

Однако есть несколько способов иметь несколько классов в одном файле. Это включает в себя: а) использование внутренних / вложенных классов; б) анонимные классы; в) перечисления; г) упаковывание локальных классов.

Единственное, что вы не можете сделать, это легко распределить определение класса по нескольким файлам.

1 голос
/ 20 июня 2011

Java не поддерживает множественное наследование для абстрактных или обычных классов, но только для интерфейсов.

Что вы можете сделать, это создать абстрактные классы, которые расширяют конкретный Activity, и продолжать создавать абстрактные классы, пока у вас не появится класс, который наследует все функции вашей деятельности.

В качестве альтернативы есть класс, который наследует несколько интерфейсов.

0 голосов
/ 31 марта 2012

Вы можете просто объявить ListView в XML и вызвать его в Activity, не нужно иметь отдельный ListActivity, просто для ListView. Это когда все ваше Activity это ListView.

И что касается беспокойства о большем количестве классов, это не плохо. Больше классов означает больше объектно-ориентированного, хотя не строго (у всего есть предел).
Множественное наследование было признано плохим из-за проблемы смерти. Таким образом, обходной путь должен был использовать Pure Virtual Classes, известный как Interface в Java (Интерфейс, тем не менее, означает обычный класс в Objective-C).
Я предлагаю вам прочитать HeadFirst Java, второе издание , для лучшего понимания терминологии и их использования. Это хорошая книга для начинающих.

0 голосов
/ 20 июня 2011

Java поддерживает множественное наследование, если просто сделать базовые классы абстрактными и назвать их interface вместо class.

...