как наследовать Конструктора от суперкласса до sub класса

Как наследовать конструктора от суперкласса до sub класса?

36
задан devrys 2 October 2012 в 15:04
поделиться

4 ответа

Конструкторы по умолчанию - общедоступные конструкторы без аргументов (объявленных или подразумеваемых) - по умолчанию наследуются. В качестве примера вы можете попробовать следующий код:

public class CtorTest {
    public static void main(String[] args) {
        final Sub sub = new Sub();
        System.err.println("Finished.");
    }

    private static class Base {
        public Base() {
            System.err.println("In Base ctor");
        }
    }

    private static class Sub extends Base {
        public Sub() {
            System.err.println("In Sub ctor");
        }
    }
}

Если вы хотите явно вызвать конструктор из суперкласса, вам нужно сделать что-то вроде этого:

public class Ctor2Test {
    public static void main(String[] args) {
        final Sub sub = new Sub();
        System.err.println("Finished.");
    }

    private static class Base {
        public Base() {
            System.err.println("In Base ctor");
        }

        public Base(final String toPrint) {
            System.err.println("In Base ctor.  To Print: " + toPrint);
        }
    }

    private static class Sub extends Base {
        public Sub() {
            super("Hello World!");
            System.err.println("In Sub ctor");
        }
    }
}

Единственное предостережение: вызов super () должен прийти в качестве первой строки вашего конструктора, иначе компилятор рассердится на вас.

6
ответ дан 27 November 2019 в 05:44
поделиться

Вы вызываете функцию getDirs непосредственно при вызове метода bind , вы должны делать это только в том случае, если эта функция возвращает другую функцию, но я думаю, что это не так.

Change:

$('#chdir select').bind('change', getDirs());

To:

$('#chdir select').bind('change', getDirs);

Или если используется jQuery 1,4 +, можно связать событие change с методом live только один раз, и после этого не нужно будет повторно связывать событие:

$(document).ready(function () {
  $('#chdir select').live('change', getDirs);
});
-121--4631627-

конструкторы не наследуются, необходимо создать новый,

Вот пример того, как это работает:

class Foo {
    Foo(String str) { }
}

class Bar extends Foo {
    Bar(String str) {
        // Here I am explicitly calling the superclass 
        // constructor - since constructors are not inherited
        // you must chain them like this.
        super(str);
    }
}
-121--1258136-

Прочитайте о супер-ключевом слове (Прокрутите вниз конструкторы подкласса). Если я понимаю ваш вопрос, вы, вероятно, хотите вызвать конструктор суперкласса?

Стоит отметить, что компилятор Java будет автоматически помещать в суперкласс вызов конструктора no-arg, если вы явно не вызываете конструктор суперкласса.

3
ответ дан 27 November 2019 в 05:44
поделиться

Zend Рамки сместился с быть относительно доступной и простой системы на более сложный объект. Она прошла через ряд быстрых событий за последние пару лет, которые оставили много старой документации вокруг.

У нас есть проекты, которые застряли на версии 1.7.x, потому что различия между этой и последней версиями слишком велики, что делает разработку и тестирование слишком дорогими.

Мне нравится Zend Framework, потому что он имеет так много глубины для него, но это определенно двухконечный меч для начинающих.

Я, конечно, рекомендую использовать опыт других пользователей и искать некоторые простые примеры структуры. ZF является очень адаптируемым, но Вам нужно постараться работать на простейшем примере.

Я думаю, что Мэтью Вейер о'Финни (поиск «Phly, boy, phly») является одним из наиболее доступных членов команды разработчиков и имеет множество примеров и идей на своем сайте.

Удачи!

-121--4649740-

Если появляется терминал, перенаправьте stdout процесса.

-121--4109544-

Скажем, если у вас есть

/**
 * 
 */
public KKSSocket(final KKSApp app, final String name) {
    this.app = app;
    this.name = name;
    ...
}

, то подкласс с именем KKSDPSocket, расширяющий KKSSocket, мог бы иметь:

/**
 * @param app
 * @param path
 * @param remoteAddr
 */
public KKSUDPSocket(KKSApp app, String path, KKSAddress remoteAddr) {
    super(app, path, remoteAddr);
}

и

/**
 * @param app
 * @param path
 */
public KKSUDPSocket(KKSApp app, String path) {
    super(app, path);
}

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

1
ответ дан 27 November 2019 в 05:44
поделиться

Конструкторы не наследуются, вы должны создать новый, идентично прототипированный конструктор в подклассе, который сопоставляется с соответствующим конструктором в суперклассе.

Вот пример того, как это работает:

class Foo {
    Foo(String str) { }
}

class Bar extends Foo {
    Bar(String str) {
        // Here I am explicitly calling the superclass 
        // constructor - since constructors are not inherited
        // you must chain them like this.
        super(str);
    }
}
48
ответ дан 27 November 2019 в 05:44
поделиться
Другие вопросы по тегам:

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