我正在学习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));
}
}
答案 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