2017-12-07 10 views
0

내가 자바 그래서에 자식 인스턴스를 사용 Vb.net 부모 - 입력

내가 하나 개의 인스턴스를 가지고 사용 다형성과 상속을 시도하고 VB에서 잘못된 그 일을 할 수있는 다형성 수행하는 방법을 더 잘 알고 변수 여러 양식을 취할 수있는 변수는 부모 형식으로 인스턴스화되고 자식 클래스 인스턴스로 초기화되지만 자식 속성에 액세스 할 수 없습니다. 나는이 작업을 얻을 수 있다면

sub main() 
    Dim animal as Animal   'instantiated as parent type 
    'some code later 
    animal= New Dog()    'no problems here 
    dim legs = animal.legs   'this works 
    dim fur = animal.fur   'this is an error 
end sub 

Public Class Animal 
    Property legs as integer 
End Class 

Public Class Dog 
    inherits Animal 
    Property fur as Boolean = True 
End Class 

그것은 좋은 것 : 아래

내가 할 노력하고있어 예입니다.

+0

지금은 '하지만'동물 같은 희미한 동물 '을 찾고 있었는데'animal = New Dog() '할 수 있고 그것이 Java가하는 Dog 클래스 유형이 될 것입니다. 바보 같은 자바 나를 망치고. – pulse

+0

이 경우 Object가 작동하고 오류가 발생하지 않으므로보다 조심해야합니다. 그것은 여러 형태를 취할 수 있기를 원합니다. 왜냐하면 그것은 '고양이'또는 '개'를 가지지 만 둘 다 아닌 객체에 있기 때문입니다. 즉, 클래스 유형 동물을위한 클래스 켄넬 – pulse

답변

1

이것은 실제로 인스턴스를 생성하지 않고 선언합니다. 당신이 동물을 알고있는 경우

Dim animal as Animal

그리고, 다음과 같이 하나를 만들 :

Dim doggo As New Dog

유일한 시간을 당신이 Animal이 경우 그대로 Dog을 치료하는 데 필요합니다 당신은 그것에 뭔가를 수행하고 있습니다 Legs.

(예를 들어 Animal 클래스) :

Shared Sub AmputateLeg(patient As Animal) 
    patient.Legs = patient.Legs - 1 
End Sub 

당신과 같이 Dog에서 호출 할 수 있습니다 : Plutonix은 주석으로, 기본 클래스는 파생 대해 아무것도 몰라한다

Dim doggo As New Dog() 
doggo.Legs = 4 
Animal.AmputateLeg(doggo) 
Console.WriteLine(doggo.Legs) ' Shows 3. 

따라서 DogAnimal 유형

으로 처리 될 때 IDE는 Fur 속성을 찾을 수 없습니다.

아마도 당신은 Interface이 방법을 사용하여 Interface 대신

Public Interface IAnimal 
    Property Fur As Boolean 
    Property Legs As Integer 
End Interface 

Public Class Dog 
    Implements IAnimal 

    Public Property Fur As Boolean = True Implements IAnimal.Fur 
    Public Property Legs As Integer = 4 Implements IAnimal.Legs 
End Class 

Public Class Duck 
    Implements IAnimal 

    Public Property Fur As Boolean = False Implements IAnimal.Fur 
    Public Property Legs As Integer = 2 Implements IAnimal.Legs 
End Class 

의 라인을 따라 뭔가 항상 Legs 및 동물의 Fur를 참조 할 수 있음을 의미를 원한다.

+0

@Plutonix 저는 무슨 뜻인지 모르시겠습니까? 이것은 아마도 내가 찾는 접근법 일 것입니다. – pulse

+0

변수/컨테이너를 선언하고 비슷한 클래스를 해당 컨테이너에 넣을 수있는 방법을 찾고 있습니다. 그래서 나중에 그 안에 들어있는 것에 따라 다른 일을 할 몇 가지 논리를 갖게 될 것입니다. 내 최고의 접근 방식은 상속을 잊고 하나의 클래스 'Animal'에있는 모든 속성을 유지하고 'animalSpecies'라는 속성을 확인하여 내가 그걸로 무엇을해야하는지 결정하는 것입니다. – pulse

+0

"비슷한 클래스"는 상속 또는 인터페이스를 제안하며 자신이 무엇인지 알지 못합니다. 둘 다 "유형에 따라 다른 것들을 할"것입니다. 개.Speak()'는 Cat.Speak()와 완전히 다른 코드가 될 것입니다. @pulse 샌프란 상속 당신은 Gobs를 가지고 있습니다. 코드 블럭이 다른 일을 수행한다면 – Plutonix