• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rzutowanie, zmiana typu obiektu

Object Storage Arubacloud
0 głosów
432 wizyt
pytanie zadane 5 października 2017 w Java przez rubesom Obywatel (1,690 p.)
edycja 5 października 2017 przez rubesom
			Kalkulator d3 = new Dziedziczenie();
			Dziedziczenie d4 = (Dziedziczenie) d3.mnozenie();

 

Nie wiem czemu nie mogę zrobić takiego rzutowania.

Mam klasę Kalkulator bez metody mnozenie() i chciał bym teraz obiekt d3 rzutować na klasę Dziedziczenie gdzie taką metodę posiadam.

Dostaję komunikat "The method mnozenie() is undefined for the type Kalkulator".

Co robię źle?

 

@EDIT Cały kod:

public class Kalkulator 
{

	private boolean wypelnienie;
	
	public Kalkulator()
	{
		this(true);
	}
	
	public Kalkulator(boolean w)
	{
		this.wypelnienie = w;
	}
	
	public void setWypelnienie(boolean w)
	{
		this.wypelnienie = w;
	}
	
	public boolean getWypelnienie()
	{
		return wypelnienie;
	}
	
	public static void main(String[] args) 
	{

	}



}

 

 

public class Dziedziczenie extends Kalkulator
{
	
	private int zmienna1;
	private int zmienna2;
	
	public int mnozenie()
	{
		int temp;
		temp =zmienna1 * zmienna2;
		return temp;
	}
	
	public Dziedziczenie()
	{
		this(2, 2);
	}
	
	public Dziedziczenie(int z1, int z2)
	{
		this(z1, z2, true);
	}
	
	public Dziedziczenie(int z1, int z2, boolean w)
	{
		super(w);
		this.zmienna1 = z1;
		this.zmienna2 = z2;
		
	}
	
	public void setZmienna1(int z)
	{
		this.zmienna1 = z;
	}
	
	public void setZmienna2(int z)
	{
		this.zmienna2 = z;
	}
	
	public int getZmienna1()
	{
		return zmienna1;
	}
	
	public int getZmienna2()
	{
		return zmienna2;
	}
	
	
	

	public static void main(String[] args) 
	{

		Dziedziczenie d = new Dziedziczenie(10, 10);
		System.out.println(d.mnozenie());
		Kalkulator k1 = new Kalkulator();
		System.out.println(k1.getWypelnienie());
		System.out.println(d.getWypelnienie());
		
	}

}

 

 

public class Polimorfizm 
{

	public static void main(String[] args) 
	{

		
		Kalkulator k1 = new Kalkulator();
		Dziedziczenie d1 = new Dziedziczenie();
		Dziedziczenie d2 = new Dziedziczenie();
		Kalkulator d3 = new Dziedziczenie();
		
		
		Kalkulator[] k2 = new Kalkulator[3];
		
		k2[0] = k1;
		k2[1] = d1;
		k2[2] = d2;
		
	
			System.out.println(((Dziedziczenie) k2[1]).mnozenie());
			
			Dziedziczenie d4 = (Dziedziczenie) d3.mnozenie();
			
//			System.out.println(((Dziedziczenie) d3).mnozenie());
			
			
		
		
	}

}

 

komentarz 5 października 2017 przez mbabane Szeryf (79,280 p.)

Pokaz kody obu klas.

Nie mozna rzutowac z klasy "nizszej" na "wyższą". Kazdy kwadrat jest figurą, ale nie każda figura jest kwadratem. Kazdy pies jest zwierzęciem ale nie każde zwierzę to pies.

class Figure
{}

class Square extends Figure{}
class Circle extends Figure{}

public class Klasa
{
    public static void main(String[] args)
    {
        Figure figure = new Figure();
        //Circle c = (Circle) figure; Błąd, Figure nawet nie wie ze istnieje takie cos jak Circle

        Square square = new Square();

        Figure figure2 = (Figure) square; //nie ma problemu square jest figurą
    }
}

 

komentarz 5 października 2017 przez rubesom Obywatel (1,690 p.)

Dodałem resztę kodu. Zachowałem zasadę, że " Nie mozna rzutowac z klasy "nizszej" na "wyższą"".

Tak jak widać w klasie "Polimorfizm", działa mi to kiedy robię to na elemencie tablicy, bezpośredni drukując ale znalazłem poradnik gdzie można to zrobić jeszcze właśnie w taki sposób:"

Dziedziczenie d4 = (Dziedziczenie) d3.mnozenie();

 

komentarz 5 października 2017 przez mbabane Szeryf (79,280 p.)

W linii 23 w klasie Polimorfizm, masz błąd bo chcesz przypisać typ int do typu Dziedziczenie.(metoda mnozenie zwraca inta)

komentarz 5 października 2017 przez rubesom Obywatel (1,690 p.)

Jak zmienię zwracany typ przez metodę to zadziała ale w związku z tym, czemu działa to w przypadku tablicy?:

 

		Kalkulator d1 = new Dziedziczenie();
		Kalkulator[] k2 = new Kalkulator[3];
		
		k2[0] = k1;
		k2[1] = d1;
		k2[2] = d2;
		
	
			System.out.println(((Dziedziczenie) k2[1]).mnozenie());

 

komentarz 5 października 2017 przez mbabane Szeryf (79,280 p.)

Ponieważ tutaj to co zwraca metoda mnozenie wysyłasz od razu do println a to potrafi samo zmienić tego inta na Stringa, tak aby wyświetlić go na konsoli. Natomiast w tym poprzednim przypadku chciałeś zrobić, tak żeby zwrócona wartość przez mnozenie stala się typem Dziedziczenie, co jest dla Javy niewykonalne. A czy jest to tablica czy nie, nie ma w tym nic do rzeczy.

Krótko to ujmując, Twój kod wykonywał coś takiego:

Dziedziczenie d4 = 12;

 

komentarz 5 października 2017 przez rubesom Obywatel (1,690 p.)
Bardzo Ci dziękuje, dużo mi wyjaśniłeś.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
1 odpowiedź 114 wizyt
pytanie zadane 29 czerwca 2021 w Java przez Lulex Użytkownik (820 p.)
0 głosów
2 odpowiedzi 1,110 wizyt
pytanie zadane 12 lipca 2017 w Java przez embid123 Użytkownik (630 p.)
0 głosów
1 odpowiedź 397 wizyt
pytanie zadane 14 marca 2017 w Java przez itcloud Gaduła (3,380 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...