Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Costruttore di default necessario?

    Salve, ho recuperato questo codice che fa parte di un esame di certificazione.
    codice:
    class Vehicle {
    	String type = "4W";
    	int maxSpeed = 100;
    	
    	Vehicle(String type, int maxSpeed) {
    		this.type = type;
    		this.maxSpeed = maxSpeed;
    	}
    }
    
    
    class Car extends Vehicle {
    	String trans;
    	
    	Car(String trans) {
    		this.trans = trans; // line 1
    	}
    	
    	Car(String type, int maxSpeed, String trans) {
    		super(type, maxSpeed);
    		this(trans); // line 2
    	}
    }
    
    
    public class Test {
    	public static void main(String args[]) {
    		Car c1 = new Car("Auto");
    		Car c2 = new Car("4W", 150, "Manual");
    		System.out.println(c1.type + " " + c1.maxSpeed + " " + c1.trans);
    		System.out.println(c2.type + " " + c2.maxSpeed + " " + c2.trans);
    	}
    }
    Risultano esserci due errori. Quello su line 2 è chiaro (super() e this() richiedono entrambi di essere la prima istruzione di un costruttore...), mentre non mi è chiaro perché il compilatore lamenti, a proposito di line 1:
    Test.java:14: error: constructor Vehicle in class Vehicle cannot be applied to given types; Car(String trans) {
    ^
    required: String,int
    found: no arguments
    reason: actual and formal argument lists differ in length
    L'istanza c1 è di tipo Car, e Car ha il proprio costruttore a un parametro String, perché Java chiama in causa il costruttore della superclasse?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    mentre non mi è chiaro perché il compilatore lamenti, a proposito di line 1:
    La prima istruzione di un costruttore è SEMPRE una invocazione super() o this() (con o senza argomenti). Se non metti uno di questi esplicito, il compilatore mette un super(); senza (ovviamente ... non saprebbe) argomenti.
    Quindi il primo costruttore di Car è in realtà:

    codice:
        Car(String trans) {
            super();
            this.trans = trans; // line 1
        }

    Quindi starebbe cercando di invocare un costruttore nella super-classe che non ha parametri. Peccato che in Vehicle c'è 1 solo costruttore che HA 2 parametri. Da lì, l'errore.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    La prima istruzione di un costruttore è SEMPRE una invocazione super() o this() (con o senza argomenti). Se non metti uno di questi esplicito, il compilatore mette un super(); senza (ovviamente ... non saprebbe) argomenti.
    Non potevo arrivarci perché non mi si era mai parlato del super() "di default" nei costruttori...

    Grazie della pronta e chiara risposta!

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.