Proč se nevolá 2. přetížená metoda? – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Proč se nevolá 2. přetížená metoda? – Java – Fórum – Programujte.comProč se nevolá 2. přetížená metoda? – Java – Fórum – Programujte.com

 

Koko
~ Anonymní uživatel
4 příspěvky
1. 5. 2014   #1
-
0
-

 Dobrý den, učím se Javu a jen mě tak napadlo tohle..

package tmp;

class Clovek {
	@Override
	public String toString () {
		return "Člověk";
	}
}

class Vzv extends Clovek {
	@Override
	public String toString () {
		return "VZV";
	}
}


public class Tmp {

	/**
	 * @param args
	 */
	static Vzv elevate (Clovek c) {
		Vzv vzv = new Vzv();
		return vzv;
		
	}


	
	static void vypis(Vzv v){
		System.out.println("The type of the object is: " + v.getClass().getName());
		System.out.println ("Hello America");
	}
	static void vypis(Clovek c) {
		System.out.println("The type of the object is: " + c.getClass().getName());
		System.out.println (c);
	}
	public static void main(String[] args) {
		Clovek a = new Clovek();
		vypis (a);
		a = elevate (a);
		vypis(a);
	}

}

Výstup:The type of the object is: tmp.Clovek
Člověk
The type of the object is: tmp.Vzv
VZV  <- Proč tu není hello america

Nahlásit jako SPAM
IP: 90.180.99.–
Kit+15
Guru
1. 5. 2014   #2
-
+1
-
Zajímavé

#1 Koko
Objekt a je třídy Clovek a proto je volána metoda vypis(Clovek c). Zkus ještě udělat 

vypis(elevate(a));
Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Flowy0
Věrný člen
1. 5. 2014   #3
-
0
-

este taky detail

static Vzv elevate(Clovek a) {
Vzv vzv = (Vzv) a;
return vzv;
}

v danom pripade to nebude rozdiel ale neskor by si z toho mohol mat nepekny bug

Nahlásit jako SPAM
IP: 95.103.186.–
https://github.com/Flowy
Kit+15
Guru
1. 5. 2014   #4
-
0
-

#3 Flowy

Exception in thread "main" java.lang.ClassCastException: Clovek cannot be cast to Vzv

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
1. 5. 2014   #5
-
0
-

#1 Koko
Je dobré se vyhýbat používání statických metod. Také v nich máš hodně závislostí, které později dokáží způsobit dost nepříjemností. Zkus si tuto variantu tvého kódu. 

import java.io.PrintStream;

public class Tmp {
    public static void main(String[] args) {
        Clovek a = new Clovek();
        a.vypis(System.out);
        a = elevate(a);
        a.vypis(System.out);
    }

    static Vzv elevate(Clovek a) {
        Vzv vzv = new Vzv();
        return vzv;
    }
}

class Clovek {
    void vypis(PrintStream out) {
        out.println("The type of the object is: " + this.getClass().getName());
        out.println(this);
    }

    @Override
    public String toString() {
        return "Člověk";
    }
}

class Vzv extends Clovek {
    void vypis(PrintStream out) {
        out.println("The type of the object is: " + this.getClass().getName());
        out.println("Hello America");
    }

    @Override
    public String toString() {
        return "VZV";
    }
}

 Obvykle je však výhodnější spolehnout se na metodu toString(): 

public class Tmp {
    public static void main(String[] args) {
        Clovek a = new Clovek();
        System.out.println(a);
        a = elevate(a);
        System.out.println(a);
    }

    static Vzv elevate(Clovek a) {
        Vzv vzv = new Vzv();
        return vzv;
    }
}

class Clovek {
    @Override
    public String toString() {
        return String.format("%s%n%s",
                "The type of the object is: " + this.getClass().getName(),
                "Člověk"
                );
    }
}

class Vzv extends Clovek {
    @Override
    public String toString() {
        return String.format("%s%n%s",
                "The type of the object is: " + this.getClass().getName(),
                "Hello America"
                );
    }
}

Je to kratší a dokonce to funguje tak, jak sis původně představoval.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Koko
~ Anonymní uživatel
4 příspěvky
1. 5. 2014   #6
-
0
-

#5 Kit
Děkuji všem za odpovědi.

Nahlásit jako SPAM
IP: 90.180.99.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 16 hostů

Podobná vlákna

Proč se mi nevolá funkce? — založil delicacyy

Staticka metoda — založil jonhnw

Hlavní metoda — založil ViliX64

Metoda createGraphics — založil Martin

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý