如何将此ArrayListClass转换为抽象类

时间:2016-11-27 16:55:42

标签: java arrays

我正在学习Java,并且不明白为什么这段代码会产生以下错误:" ArrayListClass是抽象的;无法实例化。帮助将不胜感激。

import java.util.*;

public class ArrayListClass {
    protected Object[] list;
    protected int maxSize;
    protected int length;

    public ArrayListClass() {
      maxSize = 100;
      length = 0;
      list = new Object[maxSize];
    }

    public ArrayListClass(int size) {
      maxSize = size;
      list = new Object[maxSize];
      length = 0;
    }

    public boolean isEmpty() {
      return length == 0;
    }

    public boolean isFull() {
      if (length == maxSize)
         return true;
      else 
         return false;
    }

    public int listSize() {
      return length;
    }

    public int maxListSize(){
      return maxSize;
    }

    public void print() {
      System.out.print("The list contains:");
      for(int i = 0; i < length; i++)
         System.out.print(list[i] + " ");
      System.out.println();
    }

    public boolean isItemAtEqual(int location, Object item) {
      return (list[location].equals(item));
    }

    public void insertEnd(Object item) {
      if(!isFull())
         list[length++] = item;
    }

    public static void main(String [] args) {
        ArrayListClass dac = new ArrayListClass(5);
        dac.insertEnd(4);
        dac.insertEnd(5);
        dac.insertEnd(6);
        dac.print();
        System.out.println("dac.isItemAtEqual(0,9)"+dac.isItemAtEqual(0,9));
        System.out.println("dac.isItemAtEqual(1,9)"+dac.isItemAtEqual(1,9));
    }
}  

3 个答案:

答案 0 :(得分:1)

您无法在任何编程语言中实例化任何抽象类。抽象的基本结构是,它只是蓝图,而不是真实的对象。它提供了类的模板,并将类的形式或大纲提供给实现类的具体类(&#39;扩展&#39;类...)

所以你不能实例化ArrayListClass,因为这给出了一个蓝图。如果你扩展这个类,说DerievedArrayListClass扩展了ArrayListClass,那么你将能够实例化DerievedArrayListClass。

package com;

abstract  class ArrayListClass{
    protected Object [] list;
    protected int maxSize;
    protected int length;

    public ArrayListClass(){
        maxSize = 100;
        length = 0;
        list = new Object [maxSize];
    }
    public ArrayListClass(int size){
        maxSize=size;
        list=new Object [maxSize];
        length=0;
    }


    public boolean isEmpty(){
        return length==0;
    }
    public boolean isFull(){
        if(length==maxSize)
            return true;
        else 
            return false;
    }


    public int listSize(){
        return length;
    }

    public int maxListSize(){
        return maxSize;
    }

    abstract void  print();

    public boolean isItemAtEqual(int location, Object item)
    {
        return (list[location].equals(item));
    }
    public void insertEnd(Object item){
        if(!isFull())
            list[length++] = item;
    }

}  

public class ArrayListClassImpl extends ArrayListClass{

    public ArrayListClassImpl(int i) {
        super(i);
    }

    public void print(){
        System.out.print("The list contains:");
        for(int i = 0; i < length; i++)
            System.out.print(list[i] + " ");
        System.out.println();
    }

    public static void main(String [] args){
        ArrayListClass dac = new ArrayListClassImpl(5);
        dac.insertEnd(4);
        dac.insertEnd(5);
        dac.insertEnd(6);
        dac.print();
        System.out.println("dac.isItemAtEqual(0,9)"+dac.isItemAtEqual(0,9));
        System.out.println("dac.isItemAtEqual(1,9)"+dac.isItemAtEqual(1,9));
    }
}

答案 1 :(得分:0)

如果您将课程转换为abstract,则必须创建一个 单独的 类来实现您的抽象类。

实现类必须覆盖抽象类中的未实现的方法,并且可选覆盖实现的中的任何一个或全部 em>抽象类中的方法

abstract类可以混合使用已实现和未实现的方法。 interface类只能包含未实现的方法。

您实例化了实现 abstract类的类,但您无法实例化abstract类本身,因为abstract类和{{ 1}}类被认为是描述实现必须遵循的形式的模板或蓝图。这就像一个食谱。你不能自己烘烤食谱,你必须烘焙食材。

创建,实现和实例化抽象Java类的工作示例......

Shape.java: 抽象类

interface

Circle.java: 实施班级

public abstract class Shape { // Indicates this is an abstract class

   protected static String shapeType = "generic shape";

   abstract void draw(); // Implementing class *MUST* provide (due to 'abstract' keyword)

   void logGreeting() {  // Children can *optionally* override this implementation
        System.out.println("I want to say hello");
   }
   void logDescription() {  // Children can *optionally* override this implementation
        System.out.println("This shape is a " + shapeType);
   } 

}

TestAbstract.java: 实例化类

public class Circle extends Shape { // Extends (e.g. implements) abstract class

   public Circle() {
       shapeType = "Circle";
   }

   public void logGreeting() { // Overrides implementation already in abstract class
       System.out.println("This is my overridden greeting message");
   }

   public void draw() { // Provides implementation for *unimplemented* abstract method
       // This is a NOP for example only (normally you'd put code here)
   }

}

编译代码:

public class TestAbstract extends Circle {

     public static void main(String args[]) {
          Circle circle = new Circle(); // instantiates implementing class
          circle.logGreeting();
          circle.logDescription();
          circle.draw(); 
}

执行代码:

javac Shape.java
javac Circle.java
javac TestAbstract.java

<强>输出:

java TestAbstract.java

答案 2 :(得分:0)

你的代码很好。它正在编译和执行,我的日食没有任何错误,输出是: 该列表包含:4 5 6

dac.isItemAtEqual(0,9)false

dac.isItemAtEqual(1,9)false