简述以下程序出错的原因,并改正过来。 publicclassTestDemo{ publicstaticvoidmain(String[]args){ Numbernumber=newNumber(); } } abstractclassNumber{ publicabstractintintValue(); } classIntegerextendsNumber{ privateintvalue; publicintgetValue(){ returnvalue; } publicvoidsetValue(intvalue){ this.value=value; } }
时间: 2024-03-02 13:48:28 浏览: 81
程序出错原因:
1. Number类是一个抽象类,不能直接实例化,需要使用其子类进行实例化。
2. 在TestDemo类中没有导入Integer类,因此需要加上import语句。
3. 在Integer类中intValue方法应为getValue方法。
改正后的程序如下:
```
import java.lang.*;
public class TestDemo {
public static void main(String[] args) {
Number number = new Integer();
}
}
abstract class Number {
public abstract int getValue();
}
class Integer extends Number {
private int value;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
```
相关问题
简述Java中多态性的动态绑定机制,并举例说明。 publicclassTestDemo{ publicstaticvoidmain(String[]args){//主函数不允许修改 Personper=newPerson("zhangsan",20); } } classPerson{ privateStringname; privateintage; publicPerson(){ this.name="zhangsan"; this.age=20; } }
Java中的多态性是指同一种方法在不同的对象上执行不同的操作。Java的多态性是通过动态绑定机制实现的。在运行时,Java虚拟机会根据对象的实际类型来决定调用哪个方法的实现。
举个例子,假设我们有一个Animal类和一个Dog类,Dog类是Animal类的子类。Animal类中有一个makeSound()方法,而Dog类继承了Animal类并覆盖了makeSound()方法。现在我们创建一个Animal类型的引用变量,将它指向一个Dog对象,然后调用makeSound()方法。由于Dog类覆盖了Animal类的makeSound()方法,因此在运行时,Java虚拟机会调用Dog类中的makeSound()方法,而不是Animal类中的makeSound()方法。
代码示例:
```
class Animal {
public void makeSound() {
System.out.println("The animal makes a sound");
}
}
class Dog extends Animal {
public void makeSound() {
System.out.println("The dog barks");
}
}
public class TestDemo {
public static void main(String[] args) {
Animal animal = new Dog();
animal.makeSound(); // 输出 "The dog barks"
}
}
```
在这个示例中,我们创建了一个Animal类型的变量animal,但实际上它指向的是一个Dog对象。当我们调用animal的makeSound()方法时,由于动态绑定机制的存在,Java虚拟机会调用Dog类中的makeSound()方法,因此输出的内容是"The dog barks"。
简述Object类中publicStringtoString()方法的设计意图,并完成下面的Date类 的设计。 publicclassTestDemo{ publicstaticvoidmain(String[]args){ Datetoday=newDate(2018,5,26); System.out.println(today);//要求此处的输出结果为:2018-5-26 } } classDate{ privateintyear; privateintmonth; privateintday; publicDate(intyear,intmonth,intday){ this.year=year; this.month=month; this.day=day; } }
Object类中的public String toString()方法的设计意图是返回一个字符串,该字符串包含对象的类名和内部状态信息,以便于调试和输出信息。在Java中,所有类都继承自Object类,因此都具有toString()方法,可以通过重写该方法来自定义类的输出。
下面是根据要求完成的Date类的设计:
```java
public class TestDemo {
public static void main(String[] args) {
Date today = new Date(2018, 5, 26);
System.out.println(today); // 要求输出:2018-5-26
}
}
class Date {
private int year;
private int month;
private int day;
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
@Override
public String toString() {
return year + "-" + month + "-" + day;
}
}
```
在上面的代码中,我们重写了Date类的toString()方法,返回了一个字符串,该字符串包含了年、月、日三个属性的值,并以“-”符号进行分隔。在TestDemo类中,我们创建了一个Date对象today,并调用了它的toString()方法来输出日期信息。因为我们已经重写了toString()方法,所以输出的结果符合要求,即“2018-5-26”。
阅读全文