Нет ли необходимости ставить super () в конструктор?
разве это не автоматически помещается компилятором, если я не помещаю его в конструктор подкласса?
Это означает, что мне даже не нужно заботиться об этом? В некоторых статьях они его потушили.
и если у меня есть один конструктор с аргументами, будет ли это конструктор, или он принимает конструктор без списка аргументов?
7 ответов:
во-первых с терминологией:
- никакой-args конструктор: конструктор без параметров;
- доступный конструктор без аргументов: конструктор no-args в суперклассе, видимом для подкласса. Это означает, что он либо общедоступен, либо защищен, либо, если оба класса находятся в одном пакете, доступ к пакету; и
- конструктор по умолчанию: публичный конструктор no-args, добавленный компилятором, когда нет явный конструктор в классе.
так что все классы имеют по крайней мере один конструктор.
подклассы конструкторы мая укажите как первое, что они делают, какой конструктор в суперклассе вызывать перед выполнением кода в конструкторе подкласса.
если конструктор подкласса не указывает, какой конструктор суперкласса вызывать, то компилятор автоматически вызовет доступный конструктор no-args в надкласс.
если суперкласс не имеет конструктора no-arg или он недоступен, то не указание вызываемого конструктора суперкласса (в конструкторе подкласса) является ошибкой компилятора, поэтому он должны быть указаны.
например:
public class Base { } public class Derived extends Base { }
это нормально, потому что если вы не добавляете конструктор явно Java помещает в открытый конструктор по умолчанию для вас.
public class Base { } public class Derived extends Base { public Derived(int i) { } }
тоже нормально.
public class Base { public Base(String s) { } } public class Derived extends Base { }
в выше - ошибка компиляции, поскольку база не имеет конструктора по умолчанию.
public class Base { private Base() { } } public class Derived extends Base { }
Это также ошибка, потому что конструктор No-args базы является частным.
Если конструктор суперкласса не имеет аргументов, Java автоматически вызывает его для вас. Если у него есть аргументы, вы получите ошибку.
src:http://java.sun.com/docs/books/tutorial/java/IandI/super.html
вызов супер конструктора без аргументов - это просто пустая трата пространства экрана и времени программиста. Компилятор генерирует точно такой же код, независимо от того, пишете вы его или нет.
class Explicit() { Explicit() { super(); } } class Implicit { Implicit() { } }
родительский конструктор по умолчанию вызывается из дочернего конструктора по умолчанию, даже если вы его не вызываете.
Главная
public class Main { public static void main(String[] args) { A a = new B(); } }
A
public class A { public A() { System.out.println("A"); } }
B
public class B extends A { public B() { System.out.println("B"); } }
печать
A B
Если ваш метод переопределяет один из методов своего суперкласса, вы можете вызвать переопределенный метод с помощью ключевого слова Super.
синтаксис вызова конструктора суперкласса
super(); --or-- super(parameter list);
С помощью super () вызывается конструктор без аргументов суперкласса. С помощью super (parameter list) вызывается конструктор суперкласса с соответствующим списком параметров.
Примечание: Если конструктор явно не вызывает конструктор суперкласса, то Компилятор Java автоматически вставляет вызов конструктора без параметров суперкласса. Если у суперкласса нет конструктора без аргументов, вы получите ошибку времени компиляции. Объект имеет такой конструктор, так что если объект является единственным суперклассом, нет никаких проблем.
любой конструктор класса всегда вызывает " super ()", если явно не вызывается super ([аргументы]), только мы учитываем доступ конструктора суперкласса при программировании... когда мы не расширяем какой-либо конкретный класс автоматически расширяет java.ленг.Класс объекта
abstract class Book { String title; String author; Book(String t,String a){ title=t; author=a; } abstract void display(); }
Если суперкласс может иметь конструктор без аргументов. хорошо иметь конструктор без аргументов, иначе вам нужно передать супер конструктор с параметром .
Если суперкласс не имеет конструктора no-arg или он недоступен, то не указание вызываемого конструктора суперкласса (в конструкторе подкласса) является ошибкой компилятора, поэтому он должен быть указан
class MyBook extends Book{ int price ; public MyBook(String t,String a,int price){ super(t,a); this.price=price; } public void display(){ System.out.println("Title: "+title); System.out.println("Author: "+author); System.out.println("Price: "+price); }
}