b.buck();//bu methodu cagiramiyoruz?sebebi nedir?

public class Animal{

    public void eat(){
        Sytem.out.println("Animal class eat method");
    }
}

public class Horse extends Animal{
   public void eat(){
      System.out.println("Horse class eat methog");
   }

   public void buck(){
       System.out.println("Horse class buck method");
   }
}

 public class TestAnimals {
    public static void main(String[] args) {
       Animal a=new Animal();
       Animal b=new Horse();

       a.eat();
       b.eat();
       b.buck();//bu methodu cagiramiyoruz?sebebi nedir?
   }
}

soruldu: 28 Eki '12, 04:52

Serxan's gravatar image

Serxan
51691106107
cevap kabul oranı: 46%

değiştirildi: 28 Eki '12, 04:53


b.buck();

Bu kod kısmında hata vermesi normal çünkü sen b nesnesini Animal tipinde oluşturuyorsun.

 Animal b = new Horse();

Animal tipinde, bellekten Horse sınıfı kadar yer ayrılmış b nesnesi oluştur demek. Polymorphism'den yararlanmak istiyorsan cast işlemi yapabilirsin.

((Horse)b).buck();
permanent link

cevaplandı: 28 Eki '12, 08:50

Tunahan%20Pehlivan's gravatar image

Tunahan Pehlivan
2.5k61740
cevap kabul oranı: 15%

  public class Animal{

    public void eat(){
        System.out.println("Animal class eat method");
    }
}

public class Horse extends Animal{
@Override
 public void eat(){
      System.out.println("Horse class eat methog");
   }

   public void buck(){
       System.out.println("Horse class buck method");
   }
}

 public class TestAnimals {
    public static void main(String[] args) {
       Animal a=new Animal();
       Horse b=new Horse();//Değiştirdiğim kısım

       a.eat();
       b.eat();
       b.buck();
   }
}

b nesnesini oluştururken "Horse"sınıfında override edilen "Animal" sınıfına ait metodlardan oluşan bir nesne oluşturulurmuştu. Bu yüzden "Horse" de bulunan override edilmemiş kendi metotları nesne üzerinden çağırılamıyordu. Bu yüzden de hata veriyordu. b nesnesini oluştururken tipini "Horse" olarak belirledim. böylelikle sorun çözüldü.

permanent link

cevaplandı: 28 Eki '12, 08:31

Ufukgsate's gravatar image

Ufukgsate
1156712
cevap kabul oranı: 20%

değiştirildi: 28 Eki '12, 08:33

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×3

Soruldu: 28 Eki '12, 04:52

Görüntüleme: 758 kez

Son güncelleme: 28 Eki '12, 08:50

powered by BitNami OSQA