Merhabalar, Java'da metot imzasını belirtmede ne etkilidir? Bu konuda küçük bir araştırma yaptım ancak Türkçe kaynak bulamadım. Bilgiye hızlı ulaşmak adına yardım almak istedim.

Kafamın almadığı ince noktayı izah etme gereği hissettim; 2 tane interface var ve 2 interface de aynı isme sahip metot tanımlamak istedim. 1 tane sınıfta bu 2 interface implements ediliyor. Metot imzasına göre farklı metotları kaç durumda 2 metotuda aynı sınıfta override edebilirim yada edemem?

Başarı detayda gizlidir :)

soruldu: 25 Ara '12, 09:41

KodlarinEfendisi's gravatar image

KodlarinEfendisi
8061013
cevap kabul oranı: 0%

değiştirildi: 25 Ara '12, 15:22

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183


Tam olarak yapmak istediğini anlayamadım malesef, ama soruna direkt bir cevap olarak, Java da bir methodun imzasını, onun ismi, parametrelerinin sayısı, tipleri ve yerleri belirler. Yani bir Class da ve ya Interface de

  • Aynı isimde ancak aldıkları parametre sayıları farklı,
  • Aynı isimde ve aynı parametere sayısında, ancak parametrelerin tipleri farklı
  • bu üçü de aynı ancak parametrelerin yerleri farklı

olacak şekilde method lar tanımlanabilir. Method un geri döndürdüğü değer onun imzasına dahil değildir.

permanent link

cevaplandı: 26 Ara '12, 03:43

mceliksoy's gravatar image

mceliksoy ♦
6.5k84988
cevap kabul oranı: 25%

anlatamamışım ama siz aradığım cevabı vermişsiniz. :) ben geri dönüş değeride dahil olarak kabul ediyordum. Yardımcı olduğunuz için teşekkür ederim.

(26 Ara '12, 04:55) KodlarinEfendisi KodlarinEfendisi's gravatar image

Bir sınıfta birden fazla interface implement etmenize gerek yok. Fabrika yapıp ürettirmelisiniz. Örnek bir yapı göstereyim:

ISearchProcess.java

package com.lab.backend;

public interface ISearchProcess {

    public abstract boolean userSearch(long id);

}

IUserProcess.java

package com.lab.backend;

public interface IUserProcess {

    public abstract boolean userSearch(long id);

}

Yazılan interface'ler anlamlı hale getirilir:

SearchProcessImpl.java

package com.lab.impl;

import com.lab.backend.ISearchProcess;

public class SearchProcessImpl implements ISearchProcess{

    @Override
    public boolean userSearch(long id) {
        // 
        return false;
    }

}

UserProcessImpl.java

package com.lab.impl;

import com.lab.backend.IUserProcess;

public class UserProcessImpl implements IUserProcess{

    @Override
    public boolean userSearch(long id) {
        // 
        return false;
    }

}

ProcessFactory.java

package com.lab.factory;

import com.lab.backend.ISearchProcess;
import com.lab.backend.IUserProcess;
import com.lab.impl.SearchProcessImpl;
import com.lab.impl.UserProcessImpl;

public class ProcessFactory {

    public static ISearchProcess searchProcess(){
        return new SearchProcessImpl();
    }

    public static IUserProcess userProcess(){
        return new UserProcessImpl();
    }
}

Test aşaması

package com.lab.test;

import java.io.Serializable;

import com.lab.backend.ISearchProcess;
import com.lab.backend.IUserProcess;
import com.lab.factory.ProcessFactory;

/**
 * 
 * @author MuratDemir
 *
 */

public class Test implements Serializable{

    private static final long serialVersionUID = 1L;

    private ISearchProcess search1;

    private IUserProcess search2;

    public Test(){
        search1 = ProcessFactory.searchProcess();
        search2 = ProcessFactory.userProcess();
    }

    public static void main(String[] args) {
        Test test = new Test();

        test.search1.userSearch(12345);
        test.search2.userSearch(12345);
    }
}
permanent link

cevaplandı: 25 Ara '12, 15:50

MDemir's gravatar image

MDemir
2.1k173445
cevap kabul oranı: 24%

değiştirildi: 25 Ara '12, 15:53

Teşekkür ederim, yapı kodlarını anladım. Test aşamasında ProcessFactory sınıfından metotlara(nesne yaratmadan) ulaşıp nesne döndürmesini sağladınız.Daha sonra nesne üzerinden ilgili sınıfın ilgili metoduna ulaştınız. Gerçekten çok güzel bir kod. Peki bu yapıda neyi amaçladınız ? Kısaca açıklamanız mümkün mü?

(25 Ara '12, 22:27) KodlarinEfendisi KodlarinEfendisi's gravatar image
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:

×1,076

Soruldu: 25 Ara '12, 09:41

Görüntüleme: 872 kez

Son güncelleme: 26 Ara '12, 13:01

powered by BitNami OSQA