2013-07-10 2 views
0

I m Начинающий на Java, поэтому кто-то скажет, как вызвать метод A() в объекте Animal Through Mammal.I не может понять, почему нам нужно Downcasting и Upcasting ясно.Метод вызова A класса животных путем литья

class Animal{ 
void methodA(){ 
    System.out.println("I m Animal"); 
} 
} 
class Mammal extends Animal{ 
    void methodA(){ 
     System.out.println("I m Mammal child class of Animal"); 
    } 
    void methodAB(){ 
     System.out.println("Two child class Dog and Cat I have"); 
    } 
} 

public class UpDownCast { 

public static void main(String[] args) { 

Animal a = new Animal(); 
a.methodA(); 

Mammal m = new Mammal(); 
m.methodA(); 


Animal A = new Mammal(); 
if (A instanceof Mammal){ 
    A.methodA(); 
} 
Animal A1= new Animal(); 
Mammal M1 =(Mammal)A1; 
M1.methodA(); 

} 
} 

Thanks in Advance.

+0

'Млекопитающее М1 = (млекопитающее) А1;' ли эта работа? – NINCOMPOOP

ответ

4

Если ваш экземпляр Mammal и, если вы звоните methodA() (который перекрываться в Mammal), Java будет вызывать Mammal «s methodA(). Это называется Dynamic Polymorphism

Чтобы позвонить methodA() из Animal из Mammal класса, вам нужно вызвать его с помощью super ключевого слова в пределах Mammal класса, что-то вроде ниже

class Mammal extends Animal{ 
    void methodA(){ 
     super.methodA();// --> calling Animal's methodA() 
    } 
    void methodAB(){ 
     System.out.println("Two child class Dog and Cat I have"); 
    } 
} 

Кроме того, ниже заявление вызовет ClassCastException в AnimalIS NOT AMammal (где, как млекопитающее IS A животных)

Animal A1= new Animal(); 
Mammal M1 =(Mammal)A1; 
M1.methodA(); 
+0

очень полезно, спасибо – Ganesh

2

Вы не можете вызвать метод суперкласса через объект подкласса, если вы переопределили этот метод. Как и в вашем случае Млекопитающее является подклассом Animal, поэтому, когда вы используете объект Mammal, JVM будет сначала искать внедрение метода в классе Mammal, если существует, то он вызовет метод класса Mammal, иначе будет вызван метод класса Animal.

Идея вполне логична с точки зрения наследования, если у ребенка есть поведение, унаследованное от родителя, и кто-то вызывает это поведение на дочернем, тогда будет выполняться метод child. Если у ребенка нет собственного поведения, он просто наследует его от родителя и, следовательно, будет вызван метод родителя.

+0

Спасибо за ур ответить – Ganesh

4
how to call methodA() in Animal Through Mammal object. 

Для этого вы должны ovveride в methodA в Mammal, и если у вас есть Mammal объекта с вами, вы не можете напрямую позвонить it.In этому случаю нет необходимости в отливке.

First, you must understand, что путем литья вы фактически не меняете сам объект, вы просто помечаете его по-разному.

enter image description here

+1

wow man .... :)) – Maroun

Смежные вопросы