Я хочу знать теоретические вещи о программировании - PullRequest
0 голосов
/ 01 апреля 2012

Я не уверен в одном.В объектно-ориентированном программировании есть две вещи.

  1. Конструктор

  2. Метод

Какой изони могут быть перегружены и какие из них могут быть переопределены?

Спасибо!

Ответы [ 3 ]

1 голос
/ 01 апреля 2012

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

public myClass(String a){}
public myClass(Double d){}

или для методов:

public void aMethod(String s){}
publis int aMethod(Double d){
return 0;
}

edited: bebin, переопределение обычно приходит с наследованием, когдаСуперкласс реализует метод, но подкласс должен реализовать этот метод другим способом, например: в суперклассе:

public int doSomething(){
  return a+2;
}

, но в подклассе:

@override
public in doSomething(){
return a*2;
}

и о конструкторе, переопределяющем следующую строку, взяты из CollinD, и я цитирую его: «Конструкторы не являются обычными методами, и их нельзя« переопределить ». Сказать, что конструктор может быть переопределен, будет означать, что конструктор суперкласса будетбыть видимым и может быть вызвано для создания экземпляра подкласса. Это не так ... у подкласса нет конструкторов по умолчанию (кроме конструктора без аргументов, если класс, который он расширяет, имеет один).явно объявить любые другие конструкторы, и эти конструкторы принадлежат ему, а не его суперклассу, даже если они принимают те же параметры, что и суперклассКонструкторы берут.

То, что вы упоминаете о конструкторах по умолчанию без аргументов arg, является лишь аспектом работы конструкторов и не имеет ничего общего с переопределением. "

1 голос
/ 01 апреля 2012

Это может зависеть от языка, но теоретически оба могут быть как перегружены, так и переопределены.

C # примеры всего:

class Parent {
    protected string Name;

    public Parent(string name) {
        this.Name = name;
    }

    public Parent(string firstName, string lastName) {
        this.Name = firstName + " " + lastName;
    }

    public virtual string GetName() {
        return this.Name;
    }
}

class Child : Parent {
    public Child(string firstName) : base(firstName, "Doe") {}

    public override string GetName() {
        return this.Name = " Jr.";
    }

    public string GetName(string prefix) {
        return prefix + " " + this.GetName();
    }
}

Это иллюстрирует переопределение конструктора и метода и конструктор и методперегрузки.

0 голосов
/ 01 апреля 2012

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

Переопределение позволяет подклассу заменить реализацию своего родительского класса.

Перегрузка позволяет создавать разные версии метода, которые принимают разные списки параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...