2

Я в основном ищу способ, чтобы изменить следующий исходный код с модификаторами и некоторыми дополнительными линиями в телах методов, поэтому она выводит следующее в моей консоли:Как контролировать наследование с помощью модификаторов?

1g 
1hb 
2f 
1g 
2hb 
1hb 

Сва упражнение для моих занятий в университете и я просто не могу обернуться вокруг него. Iam разрешено изменять тела метода кроме строк println, а также изменять модификаторы для методов. Как я должен это делать и в каком отношении здесь существуют модификаторы в отношении наследования? Как перегрузить методы для получения желаемого результата?

Это мой основной метод:

public class Poly { 
    public static void main(String args[]) { 
     Poly1 a = new Poly1(); 
     a.g(); 

     Poly2 b = new Poly2(); 
     b.f();  
    } 
} 

и это мой первый класс:

public class Poly1 { 

public void f() { 
    System.out.println("1f"); 
    g(); 
} 

private void g() { 
    System.out.println("1g"); 
    h(10); 
} 

protected void h(int i) { 
    System.out.println("1hi"); 
} 

void h(byte b) { 
    System.out.println("1hb"); 
} 
} 

и следующий мой второй класс:

public class Poly2 extends Poly1 { 

protected void f() { 
    System.out.println("2f"); 
    Poly1 c=new Poly1(); 
    g(); 
    h(); 
} 

public void g() { 
    System.out.println("2g"); 
    h(18); 
} 

public void h(int i) { 
    System.out.println("2hi"); 
} 

public void h(byte b) { 
    System.out.println("2hb"); 
} 
} 

ответ

0
public class Poly1 { 
    public void f() { 
     System.out.println("1f"); 
     g(); 
    } 

    public void g() { 
     System.out.println("1g"); 
     h((byte) 10); // cast to byte to invoke the overloaded method void 
         // h(byte b) 
    } 

    protected void h(int i) { 
     System.out.println("1hi"); 
    } 

    void h(byte b) { 
     System.out.println("1hb"); 
    } 
} 


public class Poly2 extends Poly1 { 

    public void f() { //change from protected to public since the visibility of an overidden method Cannot be reduced 
     System.out.println("2f"); 
     Poly1 c = new Poly1(); 
     c.g(); // invoke the methode g of Poly1 
     h((byte) 10); 
    } 

    public void g() { 
     System.out.println("2g"); 
     h(18); 
    } 

    protected void h(int i) { 
     System.out.println("2hi"); 
} 

    public void h(byte b) { 
     System.out.println("2hb"); 
    } 
} 
+0

да, это было бы в основном моим решением. Я просто не могу заставить 2hb в строке 5 работать. Это как-то должно попасть туда между ними, но я просто не знаю, как это сделать? – ph1rone

+0

super.g(); super.h ((байт) 10); – hasnae

+0

Большое вам спасибо! Наконец я понял супер ... Приветствия! – ph1rone

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