2016-04-02 15 views
1

ise yalnızca kullanılabilir yöntem nasıl yapılır
Çalışan
Müdürü
BossBen dört sınıf</p> <p>Kişi var o Patron sınıfı

Çalışan Müdürü Çalışan
Patron uzanır Kişi
uzanır genişletir Yöneticisi

Yöntemim var:
Çalışan yöntemi setSalary() { ... }

Sadece Patron sınıfı Çalışanın maaş değiştirmek isterler var. Sadece çalışan sınıfı veya sadece Yönetici sınıfı değil Boss sınıfı.

Bunu nasıl yapabilirim? Instanceof kullanmanın bir yolu olduğunu biliyorum ama nasıl olduğunu bilmiyorum ama

+0

Sadece Boss sınıfında buna ihtiyacınız varsa, neden üst sınıflarda bildirildiniz? Eğer herhangi bir nedenden dolayı ana derslerde buna ihtiyacınız varsa, bu metodun uygulanmasını boş bırakabilirdiniz, patron dışındaki tüm sınıfları belirtebilirsiniz, sadece patron sınıfı tarafından uygulanan bir arayüze sahip olabilirsiniz ... – cantSleepNow

+1

Mümkün yinelenen: Java'da C++ 'arkadaş' kavramını simüle etmenin bir yolu var mı? (Http://stackoverflow.com/questions/182278/is-there-a-way-to-simulate-the-c-friend-concept- in-java) –

+0

biraz garip, ama arayan sınıfını setSalary'de kontrol edebilirsiniz, bkz. http://stackoverflow.com/questions/11306811/how-to-get-the-caller-class-in-java – Turo

cevap

2

, o zaman o setSalary(..); yöntemidir aramasını çalışanın önleyebilirsiniz yolu yoktur. Bu sınıfın başka bir yöntemi ile sınıfın içinde özel bir yöntem de çağrılabilir.

Yapabilecekleriniz: setSalary(..);'un görünürlüğünü paket seviyesine ayarlayın ve aynı pakette ve diğer tüm paketlerde yalnızca Employee ve Boss'u saklayın. Ve sen gibi Boss şey bir yöntem olurdu Boss

herhangi Employee için setSalary(..); bazı yöntem içinde sadece denir dikkat: olacaktır

public class Boss extends Employee { 

    public void setSalaryFor(Employee employee, int salary) { 
     employee.setSalary(salary); 
    } 

} 

Ve Çalışan sınıfının yöntemi olarak:

public class Employee extends Person { 

     private int salary; 

     //Package visibility 
     void setSalary(int salary) { 
      this.salary = salary; 
     } 

} 

Bu şekilde, yalnızca Employee ve Boss numaralı paketlerinizin dışında, Employee, setSalary(..); numaralı telefonu arayamaz. çalışanın maaşını güncellemenin tek yolu, Boss numaralı kamu yöntemini çağırmak ve maaşı ve çalışanı argümana dönüştürmektir.

İlgili konular