回答
在超類中定義的方法可以訪問任何子類。但是「姐妹」班不能訪問彼此的(私人)方法。
所以,如果你的類Cat
和Animal
Dog
繼承,那麼這兩個Cat
和Dog
對象可以調用方法從Animal
,但他們不能(不得)訪問對方的方法。
如果貓不從狗則沒有
繼承不,不可能,沒有它不應該(至少不是在談論適當的OOP時)。如果一隻貓真的需要一隻狗(無論出於什麼原因),你應該將這隻狗注入貓。如果你認爲你需要它,你可能會有錯誤的繼承/抽象。
class Animal
{
public annoy();
}
class Cat extends Animal
{
private $dog;
public function __construct(Dog $dog)
{
$this->dog = $dog;
}
public function annoyDog()
{
$this->dog->annoy();
}
}
class Dog extends Animal
{
}
$dog = new Dog();
$cat = new Cat($dog);
$cat->annoyDog();
上面是一個注射的例子。請注意,正如託尼霍普金森所說,在這種情況下,您正在調用狗實例的方法。如果他們是public static
,你可以調用這個類的方法,但是因爲它被標記爲OOP,你真的不應該這樣做。附:例子是在PHP中。
If I have a class, class Animal.
And I have a class Dog and a class Cat both inheriting Animal.
Cat can call methods inside Animal. But can Cat call methods of Dog?
在JavaScript
,是的,我將使用CoffeeScript的,因爲它更容易編寫:
class Animal
bark:-> "i'm an animal"
class Dog extends Animal
eatBone : -> "i'm eating a bone"
class Cat extends Animal
cat = new Cat
alert Dog::eatBone.call cat
是否有意義?可能不是,但在原型的JavaScript方法不綁定到一個對象(除非你用閉包強制)。現在人們可能會認爲JavaScript沒有像Java那樣的類,但是像Java那樣的C++類? Python類像Java的?誰決定什麼是真正的課堂?
我的觀點是這個問題在語言環境之外是無關緊要的。
恐怕沒有。 Cat
大炮調用Dog
方法。
繼承允許在子類中但不在兄弟類內「查看」父母(如果您使用Java,則爲「public
/protected
」)方法。
Obviosly如果Cat
有Dog
財產的情況下(我不知道爲什麼它應該有......),它可以調用Dog
實例public
方法。
這裏貓和狗是兩個不同的類,它們之間沒有直接的關係。如果我們希望我們可以添加幾個代碼來鏈接這些類。在此之前,一個成員不能從另一個訪問。
在java的情況下[我遇到過Java的OOP]
不,你不能。
可由對象調用的方法由引用變量確定。
如果使用狗/貓引用變量只能在狗/貓類(包括繼承和重寫的)訪問方法
如果使用動物(ieParent類)作爲參考變量,並將它指到一個Cat/Dog類對象。您只能使用該參考變量調用子類的繼承/重寫方法。這是在編譯時決定的[如果被調用的函數被參考變量或否定]
Dog類對象不知道獨佔Cat類函數[繼承和重寫的函數除外],所以它不能調用方法。
正如其他人所指出的,如果你有這樣的情況,你可能不會尋找繼承。
- 1. AS3 - 面向對象 - 繼承
- 2. 面向對象,繼承,抽象
- 3. 面向對象的基本繼承
- 4. javascript中的面向對象繼承
- 5. 學習面向對象的繼承
- 6. WebdriverIO頁面對象繼承
- 7. PHP面向對象:抽象,接口,繼承等
- 8. 在C++中繼承對象的向量
- 9. 指向繼承中的對象
- 10. 對象繼承嗎?
- 11. 繼承ActiveRecord對象
- 12. Javascript對象繼承
- 13. 類,對象,繼承?
- 14. Javascript對象繼承
- 15. 繼承的對象
- 16. 繼承JavaScript對象
- 17. C#對象繼承
- 18. 從基類繼承Page_Load。正確的面向對象編程
- 19. 關於在Python中繼承的面向對象設計
- 20. 如何在面向對象編程中爲繼承建模
- 21. 面向對象編程,繼承,複製構造函數
- 22. 接口和繼承 - 面向對象的設計困境
- 23. 單片繼承VS模塊件基於面向對象設計
- 24. 面向對象中的多重繼承C++ C++ 11
- 25. 面向對象設計的繼承建議
- 26. 面向對象的PHP繼承 - 訪問父級的屬性
- 27. 面向對象的設計 - 專業化:繼承與屬性
- 28. 面向對象設計問題:繼承與接口發現
- 29. 面向對象編程基礎:繼承與投影(Python)
- 30. 面嚮對象語言中繼承的概念
@DWright,http://en.wikipedia.org/wiki/Friend_class;) – Fivell
所以,除非你明確地做'friend class Dog',否則它不會工作? – 40Plot
@Fivell:確切地說。 – DWright