2016-07-07 3 views
0

кода 1:Overriding- Почему долго вызываются вместо Int

class Tyre 
{ 
    public void front() throws RuntimeException 
    { 
     System.out.println("Tire"); 
    } 
    public void front(int a) 
    { 
     System.out.println("Radial Tire with int in tyre"); 
    } 
    public void front(long a) 
    { 
     System.out.println("Radial Tire with long"); 
    } 
} 

class RadialTyre extends Tyre 
{ 
    public void front() 
{ 
     System.out.println("Radial Tire"); 
    } 
    public void front(int a) 
    { 
     System.out.println("Radial Tire with int"); 
    } 
} 

class Test 
{ 
     public static void main(String... args) 
     { 
       Tyre t = new RadialTyre(); 
       int a = 10; 
       t.front(a); 
     } 
} 

о/р для code1: -радиальные шины с Int

кодом 2: -

class Tyre 
{ 
    public void front() throws RuntimeException 
    { 
     System.out.println("Tire"); 
    } 

    public void front(long a) 
    { 
     System.out.println("Radial Tire with long"); 
    } 
} 

class RadialTyre extends Tyre 
{ 
    public void front() 
{ 
     System.out.println("Radial Tire"); 
    } 
    public void front(int a) 
    { 
     System.out.println("Radial Tire with int"); 
    } 
} 

class Test 
{ 
     public static void main(String... args) 
     { 
       Tyre t = new RadialTyre(); 
       int a = 10; 
       t.front(a); 
     } 
} 

о/p для кода 2: - Радиальная шина с длинными

Почему в методе child1 класса int вызывается в то время как в классе code2 вызывается длинный длинный метод? Если это происходит из-за расширения, то почему в случае расширения1 не происходит? В коде1 почему метод дочернего класса int вызывается, когда метод int уже существует в родительском классе?

ответ

2

Почему в методе класса 1 класс класса child вызывается, когда вызывается в классе 2 родительского класса code2?

Потому что вы сделали не переопределение, вы перегружен. Перегрузка - это когда имя метода совпадает, но подпись отличается (например, параметр long vs int).

Поскольку вы имеете в вид типа Tyre и не RadialTyre, и нет переопределения для этого метода front, он выбирает только один Tyre знает: тот, который принимает long параметра.

class RadialTyre extends Tyre { 
    // This is an overLOAD, same method name but different parameter type 
    public void front(long a) { 
     System.out.println("Radial Tire with int"); 
    } 

    // This is an overRIDE, same method name with same signature 
    public void front(int a) { 
     System.out.println("Radial Tire with long - override"); 
    } 
} 

В code1 почему дочерний метод класса INT вызывается, когда метод ИНТ уже существует в родительском классе?

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

+0

Спасибо, что ответили на мой первый вопрос. Если Tire не известно о RadialTyre, то почему метод int RadialTyre выполняется вместо метода int из класса Tire в коде1? Эти методы int определенно переопределены. – Snehal

+0

@Snehai Отвечал и на третий вопрос. Однако мой основной язык не английский, и я никогда не слышал о «расширении». Я читаю об этом в Википедии, это, похоже, не связано с вашим вопросом. Можете ли вы уточнить? – BackSlash

+0

Вы можете сослаться на это для понимания расширения https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html – Snehal

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