search
Giriş
Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın Türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
1 oy
7.2k gösterim

Bir sınıf kendisini extend eden sınıfa cast edilebilir . Buna downcasting denir. Peki upcasting ile farki nedir? Javada kullanim amaci nedir?

Java kategorisinde 193 puan
yeniden etikenlendirildi

1 cevap

3 oy

OOP kullanım özelliklerine baktığımız zaman bir nesnesnin diğer nesneden kalıtlanabileceği biliyoruz. Hepimizin kullandığı bilgisayar bileşenlerinden örnek verelim. Mesla bilgisayar kullanmı için bir fareye ihtiyacımız var ve bu fare strandard iki tuşlu fare olsun. Daha sonradan yetmeyerek daha işlevsel bir fare kullanmaya başlıyorsunuz. İkisi de temel özellikler olarak birbiri yerine kullanılabilir. Tabi sonradan eklenen görece daha özel olan özellikleri saymıyorum. Şimdi kod örneklemesiyle bakalım

class Fare {
 public void tikla() {}
}

class OyunFaresi extends Fare {
  public void scrollKullan() {}
}

Fare kullanilan = new Fare();

Şimdi genel amaçlı fareyi kullanmak için bir değişkene atadık. İşlemlerimizi bu sınıf üzerinden yapabiliriz. Şimdi yeni bir fare kullanmamız gerekse(oyunfaresi) bunu Fare türünden bir değişkene atayabilir miyiz?

Fare kullanılan = new OyunFaresi(); // otomatik upcasting

Cevabımız, evet atayabiliriz. Çünkü OyunFaresi normal fare üzerinden türeyen bir sınıf. Bu da demek oluyor ki OyunFaresi doğal olarak bir fare.

Burda bir sınırlama karşımıza çıkıyor. OyunFaresi'ni normal bir fare olarak değişkene atadığımız için bu nesne bize sadece normal farenin yapabildiği işlemleri yapacak. Yani sadece tikla() komutunu yerine getirecek. Şayet bu nesneyi bir OyunFaresi olarak kullanmak istiyorsak bunu aynı türden bir değişkene atamamız gerekirdi.

OyunFaresi kullanilacak = kullanilan; // burada compile-time-error (derleme zamanı hatası alırız) 

Peki hatayı neden alırız çünkü programlama dili fare tipindeki değişkeni kendisini türeten bir nesneye nasıl atanır bilemeyecek. Bizim bu farenin hangi tarz bir fare olduğunu belirtmemiz gerekiyor. 

OyunFaresi kullanılacak = (OyunFaresi)kullanilan;  //downcasting

Kısaca özetlemek gerekirse. Genelden özele doğru gidilen sınıf yapısında genel olan sınıflar özel olanların ne iş yaptığını bilemez. Genel sınıfları özel tarzda bir değişkene atadığımız zaman belirmeliyiz. Buna downcasting denir. Tersi duruma, yani özelden genele doğru çıkılan durumlarda ise upcasting denir.

İyi çalışmalar.

6.2k puan

İlgili sorular

0 oy
1 cevap 868 gösterim
868 gösterim
Neden genellikle bu inilitize edilme kullanılmaktadır? Yani Map objesine HashMap objesi yaratılıp atanır. HashMap<X, X> = new HashMap<X, X>(); --> Map<X, X> = new HashMap<X, X>(); örnek vercek olursam: HashMap<Integer, String> map = new HashMap<Integer, String>(); bunun yerine Map<Integer, String> map = new HashMap<Integer, String>(); kullanılıyor. Bir benzeri de ArrayList(s)'de de var.
13 Mayıs 2017 Java kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 1.5K gösterim
1.5K gösterim
Maven kullanırken artifact ve repository kelimeleri geçiyor. Bunlar nelerdir? Nerede ve nasıl kullanırım?
31 Ağustos 2021 Java kategorisinde kenan 6.2k puan sordu
0 oy
1 cevap 958 gösterim
958 gösterim
Lambda Expression ve Anonymous class arasındaki fark nedir? Lamda epression anonim bir fonksiyon diye biliyorum. Yani Anonim bir functional interface class'ı Hatta @FunctionalInterface kullanılıyor,.
30 Eylül 2020 Java kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 1.5K gösterim
1.5K gösterim
Java programa dilinde Error ve Exception kavramları diğer dillerde de var mı öncelikle? İkinci olarak bu iki teri arasındaki temel ve genel farklar nelerdir?
1 Eylül 2018 Java kategorisinde tolgacelik.art 2.0k puan sordu
1 oy
1 cevap 1.3K gösterim
1.3K gösterim
Selamlar, Spring de kullanılan metodların üzerindeki @Transactional yapısı ve bunların attributeları (Propagation,Isolation,...) nedir? ne amaçla kullanılır? İkinci sorum olarak da nested transactional işlemlerde commit ve rollback attribute ları da göz önüne alırsak exception alması durumunca nasıl çalışır? Sevgiler Erkan
11 Ağustos 2018 Java kategorisinde erkanerkisi 211 puan sordu