[]
Android Java
Merhaba ben uygulama içi satın alma işlemini anlamaya çalışıyorum anlamadığım bir konu var.
Şöyle bir tanımlama kullanılmış.
private final BillingClient mBillingClient;
ctrl ile BillingClient üzerine geldiğim de BillingClient.java açılıyor ve BillingClient.javanın bir abstact class olduğunu anlıyorum fakat abstract clas extensts ile dahil edilir.
Hemen aklıma casting yapılma ihtimali geldi fakat bunun içinde kalıtım olması gerekiyor ve kalıtım içinde extensts veya interface ise de imlements kullanılır böyle bir şey kullanılmamış.
Bu tanımlama şekli nedir acaca ?
codelabs.developers.google.com
Şöyle bir tanımlama kullanılmış.
private final BillingClient mBillingClient;
ctrl ile BillingClient üzerine geldiğim de BillingClient.java açılıyor ve BillingClient.javanın bir abstact class olduğunu anlıyorum fakat abstract clas extensts ile dahil edilir.
Hemen aklıma casting yapılma ihtimali geldi fakat bunun içinde kalıtım olması gerekiyor ve kalıtım içinde extensts veya interface ise de imlements kullanılır böyle bir şey kullanılmamış.
Bu tanımlama şekli nedir acaca ?
codelabs.developers.google.com
oncelikle abstract class'i illa extend etmek zorunda degilsin. Anonymous olarak da bu classi implement edebilirsin.
new BillingClient() {
@Override
public void myAbstractMethod() {
}
}
seklinde BillingClient instance'i olusturup kullanabilirsin. AsyncTask class'ina bakarsan o da ayni sekilde.
ikincisi extend edilen class'lar super classlari yerine kullanilabilinir. yani
public class BillingClientImpl extends BillingClient {
}
olsun diyelim.
BillingClient billingClient = new BillingClientImpl(); seklinde kullanabilirsin. Gorunuse gore OOP konularini tam kavrayamamissin. OOP uzerine biraz daha calismalisin
new BillingClient() {
@Override
public void myAbstractMethod() {
}
}
seklinde BillingClient instance'i olusturup kullanabilirsin. AsyncTask class'ina bakarsan o da ayni sekilde.
ikincisi extend edilen class'lar super classlari yerine kullanilabilinir. yani
public class BillingClientImpl extends BillingClient {
}
olsun diyelim.
BillingClient billingClient = new BillingClientImpl(); seklinde kullanabilirsin. Gorunuse gore OOP konularini tam kavrayamamissin. OOP uzerine biraz daha calismalisin
- crucio (04.04.19 11:38:33)
Merhaba @crucio bana değerli vaktini ayırarak cevap verdiğin için teşekkür ediyorum. Verdiğin cevap'ı çok faydalı buldum.
Fakat bilgisayarı güncelemem gerekti ve aksilikler yaşadım O yüzden geri dönüş yapmam uzun sürdür özür diliyorum.
instance oluşturarak abstract class'ı oluşturabilirsin diyorsun evet denedim oluyor fakat aşağıda vereceğim link te base class'ların instancesi oluşturulamaz diyor.
www.akinabdullahoglu.com
Birde bu olayın mantığını tam anlayamadım.
Abstrac class soyut class olduğu için nesne oluşturulamaz yani ram'de yer ayrılmaz ama nesne oluşturmak için kullanılan new operatörü absrtact class'ın instance'si oluşturulurken de kullanılabilir peki bu new tam olarak ne yapıyor ?
Aşağıda verdiğim link'teki yazıları google çeviri kullanarak okudum ama tam anlayamadım.
stackoverflow.com
Ayrıca bir abstact class'ı bir metod gibi yazıp nasıl örnekleme oluşturulabiliyor kafam almıyor.
Sonuçta BillingClient bir abstrac class olduğunu kabul edersek bir class'ı metot gibi yazmak da ne demek oluyor new BillingClient() {}
İşe yaradığını biliyorum denedim oluyor fakat mantığını anlayamadım.
İkinci örneğine gelirsek
BillingClient billingClient = new BillingClientImpl();
yukarıda ki yöntemle biz zoyut bir sınıfı yani ram'de yer ayrılamayan bir sınıfı BillingClientImpl sınıfının ram'deki yerini kullanmasını sağlıyoruz değil mi ?
Soyut sınıf somut sınıfın ram'deki yerini kullanıyor.
Doğru mu anladım ?
Fakat bilgisayarı güncelemem gerekti ve aksilikler yaşadım O yüzden geri dönüş yapmam uzun sürdür özür diliyorum.
instance oluşturarak abstract class'ı oluşturabilirsin diyorsun evet denedim oluyor fakat aşağıda vereceğim link te base class'ların instancesi oluşturulamaz diyor.
www.akinabdullahoglu.com
Birde bu olayın mantığını tam anlayamadım.
Abstrac class soyut class olduğu için nesne oluşturulamaz yani ram'de yer ayrılmaz ama nesne oluşturmak için kullanılan new operatörü absrtact class'ın instance'si oluşturulurken de kullanılabilir peki bu new tam olarak ne yapıyor ?
Aşağıda verdiğim link'teki yazıları google çeviri kullanarak okudum ama tam anlayamadım.
stackoverflow.com
Ayrıca bir abstact class'ı bir metod gibi yazıp nasıl örnekleme oluşturulabiliyor kafam almıyor.
Sonuçta BillingClient bir abstrac class olduğunu kabul edersek bir class'ı metot gibi yazmak da ne demek oluyor new BillingClient() {}
İşe yaradığını biliyorum denedim oluyor fakat mantığını anlayamadım.
İkinci örneğine gelirsek
BillingClient billingClient = new BillingClientImpl();
yukarıda ki yöntemle biz zoyut bir sınıfı yani ram'de yer ayrılamayan bir sınıfı BillingClientImpl sınıfının ram'deki yerini kullanmasını sağlıyoruz değil mi ?
Soyut sınıf somut sınıfın ram'deki yerini kullanıyor.
Doğru mu anladım ?
- aristotelesin berberi (09.04.19 12:47:14)
selam,
rica ederim yardimci olabildigime sevindim. oncelikle terimlerin turkcelerini bilmiyorum o yuzden ingilizce terimler kullanicam kusura bakma.
-verdigin linkte c# icin bahsetmis. c#'da dedigin gibi abstract classlari anonymous class olarak extend edip instantiate edemezsin. java'da bu mumkun. aslinda javada yaptigimiz biraz syntactic sugar gibi dusunebilirsin.
new BillingClient() {} seklinde abstract class'in anonymous instance'ini olusturdugumuzda arka planda java bu BillingClient'tan extend eden baska bir class tanimliyor. genelde bunun ismi BaskaBirClassAdi_$1 seklinde olur. yani aslinda java compiler su sekilde bir kod olusturuyor
public class BaskaBirClassAdi_$1 extends BillingClient{
public vois abstractClass() {
//doSomething
}
}
ve bu class'in instance'ini olusturup sana donuyor. Eger kodu debug edip abstractClass icinde class adina bakarsan class adinin bu sekilde oldugunu gorursun.
"new" operatorunun amaci memory allocation yapmaktir. memory allocation yapmak hafizada o alani sadece bu class'in kullanimi icin isaretlemek demektir. henuz bu hafizada bu alana birsey yazilmadi, cop veri var su anda burada. constructor'da ise bu hafizaya class bilgileri yaziliyor. yani aslinda new operatoru eger C yada C++ biliyorsan "malloc" fonksiyonunun islevini goruyor. java daha high level bir dil oldugu icin memory allocation'i ve initialization'i tek bir komutta yapiyor.
"new BillingClient() {}" bu kullanimin nasil calistigini yukarida yazdim, aciklayici olmustur sanirim.
BillingClient billingClient = new BillingClientImpl(); burada yaptigimiz da polymorphisim. Extend edilen class'a base class gibi davraniyoruz. bu nesne ile etkilesime gecenler sadece base class'in ozelliklerini gorebiliyor.
rica ederim yardimci olabildigime sevindim. oncelikle terimlerin turkcelerini bilmiyorum o yuzden ingilizce terimler kullanicam kusura bakma.
-verdigin linkte c# icin bahsetmis. c#'da dedigin gibi abstract classlari anonymous class olarak extend edip instantiate edemezsin. java'da bu mumkun. aslinda javada yaptigimiz biraz syntactic sugar gibi dusunebilirsin.
new BillingClient() {} seklinde abstract class'in anonymous instance'ini olusturdugumuzda arka planda java bu BillingClient'tan extend eden baska bir class tanimliyor. genelde bunun ismi BaskaBirClassAdi_$1 seklinde olur. yani aslinda java compiler su sekilde bir kod olusturuyor
public class BaskaBirClassAdi_$1 extends BillingClient{
public vois abstractClass() {
//doSomething
}
}
ve bu class'in instance'ini olusturup sana donuyor. Eger kodu debug edip abstractClass icinde class adina bakarsan class adinin bu sekilde oldugunu gorursun.
"new" operatorunun amaci memory allocation yapmaktir. memory allocation yapmak hafizada o alani sadece bu class'in kullanimi icin isaretlemek demektir. henuz bu hafizada bu alana birsey yazilmadi, cop veri var su anda burada. constructor'da ise bu hafizaya class bilgileri yaziliyor. yani aslinda new operatoru eger C yada C++ biliyorsan "malloc" fonksiyonunun islevini goruyor. java daha high level bir dil oldugu icin memory allocation'i ve initialization'i tek bir komutta yapiyor.
"new BillingClient() {}" bu kullanimin nasil calistigini yukarida yazdim, aciklayici olmustur sanirim.
BillingClient billingClient = new BillingClientImpl(); burada yaptigimiz da polymorphisim. Extend edilen class'a base class gibi davraniyoruz. bu nesne ile etkilesime gecenler sadece base class'in ozelliklerini gorebiliyor.
- crucio (09.04.19 13:38:58)
merhaba @crucio verdiğin bilgiler için çok çok teşekkür ediyorum.
BillingClient'tan extend eden baska bir class tanimliyor
cümlen gerçekten beni aydınlattı yazını anlamaya çalışıyorum debug konusunu öğrenmeye çalışıyorum.
Yarın tekrar sorular sormak istiyorum bu bilgileri sindirdikten sonra gerçekten çok bilgili birisin çok teşekkürler.
BillingClient'tan extend eden baska bir class tanimliyor
cümlen gerçekten beni aydınlattı yazını anlamaya çalışıyorum debug konusunu öğrenmeye çalışıyorum.
Yarın tekrar sorular sormak istiyorum bu bilgileri sindirdikten sonra gerçekten çok bilgili birisin çok teşekkürler.
- aristotelesin berberi (09.04.19 15:54:32)
@crucio merhaba nasılsın, bir kaç sorum var cevaplarsan çok fayda sağlayacağım.
1. Sorum extent edilen abstract classın nesnesini oluşturmak ile ilgili;
biz eğer bir abstact classı extent ettiysek onun metotlarını ctrl+o yaparak çağırabiliriz, extent edilmiş bir abstact classın neden nesnesini oluşturmaya ihtiyac duyuyoruz.Abstact class zaten soyut class bunun nesnesini oluşturduğumuzda bu remde yer tutar ve soyut olmaktan çıkar.
Galiba kafamda doğru olduğunu düşündüğüm şöyle bir düşünce var
ben bir classın metotlarını çağırmak için nesnesini oluşturmam gerektiğini düşünüyorum. Bu yanlış mı ?
2. Sorum da bir classı debug edip bir abstac classın şu şekilde oluşturup
new BillingClient() {
@Override
public void myAbstractMethod() {
}
}
sonra debug ettiğimde arka planda nesne oluşturan metotdu bulamadım nasıl bulacağımı bana öğretebilirmisin.
Bu bilgi çok işime yarayacak çünkü.
Ben debug edebiliyorum fakat dediğin metodu bulamıyorum bulamıyorum.
Teşekkürler.
1. Sorum extent edilen abstract classın nesnesini oluşturmak ile ilgili;
biz eğer bir abstact classı extent ettiysek onun metotlarını ctrl+o yaparak çağırabiliriz, extent edilmiş bir abstact classın neden nesnesini oluşturmaya ihtiyac duyuyoruz.Abstact class zaten soyut class bunun nesnesini oluşturduğumuzda bu remde yer tutar ve soyut olmaktan çıkar.
Galiba kafamda doğru olduğunu düşündüğüm şöyle bir düşünce var
ben bir classın metotlarını çağırmak için nesnesini oluşturmam gerektiğini düşünüyorum. Bu yanlış mı ?
2. Sorum da bir classı debug edip bir abstac classın şu şekilde oluşturup
new BillingClient() {
@Override
public void myAbstractMethod() {
}
}
sonra debug ettiğimde arka planda nesne oluşturan metotdu bulamadım nasıl bulacağımı bana öğretebilirmisin.
Bu bilgi çok işime yarayacak çünkü.
Ben debug edebiliyorum fakat dediğin metodu bulamıyorum bulamıyorum.
Teşekkürler.
- aristotelesin berberi (15.04.19 19:15:09)
1