Вызов метода из родительского абстрактного класса

1

Я просто пытался понять абстрактные классы и интерфейсы подробно с помощью java. Я прочитал несколько вопросов в SO, связанных с переопределением и внедрением одного и того же метода подписи из абстрактного класса и интерфейса.

Ссылки: один, два

После этого я просто попытался использовать свой собственный код, чтобы лучше понять концепцию. Затем я наткнулся на несколько вопросов:

  1. Как я буду называть конкретный метод, написанный в абстрактном классе?
  2. Будет ли тип литья возможен между A и I, если объект имеет тип C?

Я пробовал с приведенным ниже кодом:

public class TestMethods {

  public static void main(String[] args) {
    C c1 = new C();
    c1.methodOne();
    c1.methodTwo();

    // Q.1
    A c2 = new C();
    // HOW TO CALL METHOD IN CLASS A WITH c2
    c2.methodOne(); // I want to call here methodOne() from A

    // Q.2
    I c3 = new C();
    A c4 = (A) c3;
    // WILL THIS TYPE CASTING WORKS
    // HOW TO CALL METHOD IN CLASS A WITH c4
    c4.methodOne();
    c4.methodTwo();
  }

}

class C extends A implements I{

  @Override
  public void methodTwo() {
    System.out.println("Method Two in Concrete Class C");
  }

  @Override
  public void methodOne(){
    System.out.println("Method One in Concrete Class C");
  }

}


abstract class A{
  public void methodOne(){
    System.out.println("Method One in Abstract Class A");
  }

  public abstract void methodTwo();
}

interface I{
  public void methodOne();
  public void methodTwo();
}

ADDED

Q.3
Согласно предложению в одном из ответов ниже, я могу назвать super.methodOne() из класса C Но что, если у меня нет вызова super из моего конкретного класса C для вызова конкретного метода из его расширяющегося родительского абстрактного класса A? И мне не нужна модификация для моего конкретного класса C, тогда я смогу вызвать метод в суперклассе?

  • 0
    Я попытался с некоторым кодом и задал вопросы, на которые я не нашел ответа.
Теги:
interface
abstract-class
method-overriding

1 ответ

2
  1. вы можете вызвать конкретный метод с super.methodOne() метода super.methodOne()
  2. вы можете использовать C для A и C для I, а не наоборот, поскольку C имеет все, что имеет A, но может иметь еще несколько, поэтому C является A, но A не является C.
  • 0
    Для Q.1 - откуда я должен вызвать это super.methodOne() , потому что я хочу вызвать после того, как я создал объект c2 . Я попытался с вызовом ((A)c2).methodOne() но он все еще вызывает метод из C В вопросе Q.2 у меня возник вопрос: можно ли привести ссылку I на ссылку A , если объект относится к типу C
  • 0
    1. Вы можете вызывать super.methodOne() из любого места внутри класса C. 2. Да, вы можете, но только если вы уверены, что это объект типа A или C.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню