如何在另一个类中使用Abstract类中的非抽象方法而不进行扩展

时间:2018-01-12 12:32:59

标签: java

如何使用另一个类abstract类的非抽象方法而不扩展

3 个答案:

答案 0 :(得分:0)

抽象类:

    package com.test;
    public abstract class MyAbstract {

      public abstract void abstractMethod();

      public void callNonAbstractMethod() {


        System.out.println("Hello");
      }
    }

匿名类:

 package com.test;

    public class Example {

      public static void main(String[] args) {
        new Example().something();
      }

      void something() {
        MyAbstract a = new MyAbstract() {

          @Override
          public void abstractMethod() {
            //TODO implement
          }
        };
        a.callNonAbstractMethod();
      }
    }

编译器生成的内部类将用于上述示例。

static class Example  extends MyAbstract 
        {  
           Example(){}
           void abstractMethod()  
            {  
                System.out.println("hiee");  
            }  
        } 

抽象类:

  package com.test;
    public abstract class MyAbstract {

      public abstract void abstractMethod();

      public void callNonAbstractMethod() {


        System.out.println("Hello");
      }
    }

答案 1 :(得分:-1)

我认为你可以使用匿名类。虽然它是一种扩展,但您没有明确使用关键字extends。事实上,你不能在没有隐式扩展的情况下在java中使用任何类,因为每个类都扩展Object

package com.test;

public class Example {

  public static void main(String[] args) {
    new Example().something();
  }

  void something() {
    MyAbstract a = new MyAbstract() {

      @Override
      public void abstractMethod() {
        //TODO implement
      }
    };
    a.callNonAbstractMethod();
  }
}

这是你的抽象类:

package com.test;

public abstract class MyAbstract {

  public abstract void abstractMethod();

  public void callNonAbstractMethod() {
    System.out.println("Hello");
  }
}

结果:

Hello

答案 2 :(得分:-1)

你不能。

要调用某个类A的任何非静态方法,您需要AA的子类的实例,因为这样的方法通常对此类数据进行操作一个实例。这就是“面向对象”的核心所在。

在您的情况下,A是抽象的,不能有直接实例。因此,调用方法的唯一方法是使某些类B的实例扩展A。您可以找到可以使用的现有子类,也可以创建自己的子类。