Абстрактный класс со строителем

Может одна clase abstracta Java иметь constructor ?

И если это так: Какие концы у него есть?

21
задан 11.12.2015, 03:03
3 ответа

короткий Ответ: ЕСЛИ , у абстрактных классов могут быть строители, но ТОЛЬКО чтобы быть использованными со строителей классов дочери, ты не можешь использовать их прямо, потому что из-за определения JLS (§8.1.1.1) не могут instanciar абстрактный класс.


Объяснение использования

Думает в случае абстрактного класса, где ты был должен инициализировать Ваши признаки. Если у тебя был строитель vacГ, - или была бы сделана безусловно в классе дочь, в противоположном случае мы должны использовать super(param1, param2);, чтобы это определять. Строитель с параметрами в абстрактном классе, что он делает, состоит в том, чтобы вынуждать в класс дочь определять параметры.


практический Пример:

abstract class Persona {
   private String nombre;

   // declaracion del constructor de la clase abstracta por lo que implicitamente 
   //estamos omitiendo el constructor por defecto public Person() obligando a las
   // clases hijas a llamar a este constructor con parametros.
   public Person(String nombre) {
      this.nombre = nombre;
   }
}

class Estudiante extends Persona {
   public Estudiante(String nombre) {
     // uso del constructor de la clase abstracta
     super(nombre);   
   }
}

// finalmente puedes realizar la abstraccion con Estudiante y Persona
Person p = new Estudiante("Manuel");
25
ответ дан 24.11.2019, 15:09
  • 1
    У тебя есть raz и # 243; n Хорди, что он перемещает, что многие это делают. Adem и # 225; s не, потому что все трогаются с 100, уже удалите мой ответ. – Santi92 02.12.2015, 15:16
  • 2
    мы трогаемся с 100, потому что у нас есть репутация в других форумах stackechange, я это чувствую, но думаю тратить всю необходимую репутацию, чтобы препятствовать этим практикам, я например, сделал похожей вещью здесь es.stackoverflow.com/questions/225/… , но потому что я считаю, что это вопрос / ответ, который должен быть в этом форуме другой как многие, но не копируя, это вещи, легкие для того, чтобы быть отвеченными, не необходимо копировать и с первоначальным контентом мы сделаем из этого сообщества сайт с большим качеством – Jordi Castilla 02.12.2015, 15:21
  • 3
    Довольно понятый Хорди, спасибо за aclaraci и # 243; n 100 песет. Я tambi и # 233; n я думаю равно как Вы, s и # 243; то, чего у меня все еще нет reputaci и # 243; n, чтобы умерять на этих темах. Привет и спасибо за Ваш ответ – Santi92 02.12.2015, 15:24
  • 4
    Точно то же самое, конечно, применяется в.NET – Konamiman 03.12.2015, 11:04

Ясно, что он может:

abstract class Producto { 
    int multiplicadoPor;
    public Producto( int multiplicadoPor ) {
        this.multiplicadoPor = multiplicadoPor;
    }

    public int multiplicar(int valor) {
       return multiplicadoPor * valor;
    }
}

class MultiplicadoPorDos extends Producto {
    public MultiplicadoPorDos() {
        super(2);
    }
}

class MultiplicadoPorX extends Producto {
    public MultiplicadoPorX(int x) {
        super(x);
    }
}

У абстрактных классов всегда есть строитель. Если ты не определяешь один тогда, создается один назначено по умолчанию и без аргументов, как он происходит с любым другим классом. В самом деле, у ВСЕХ классов, включая укрытые и анонимные классы, будет назначенный по умолчанию строитель, если не будет определен один (в случае анонимных классов невозможно определять одну, так что у тебя всегда будет созданный назначенный по умолчанию строитель).

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

Ссылка:

3
ответ дан 24.11.2019, 15:09
  • 1
    В случае классов an и # 243; nimas, ты не можешь добавлять его строитель, но можешь добавлять блок inicializaci и # 243; n, что функционирует как вид строителя. –  25.02.2016, 05:58

В классе для того, чтобы она была абстрактной, нуждайся в том, чтобы иметь, по крайней мере, один mГ©todo абстрактно.

Идея, состоящая в том, что класс абстрактный, состоит в том, чтобы он обладал mГ©todos абстрактные, чтобы мочь быть осуществленными и надписи из-за классов, которые они получают в наследство от абстрактного класса, и asГ - применять, если он просит ее lГіgica у дела, полиморфизм.

1
ответ дан 24.11.2019, 15:09