首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

请问两个基础有关问题,多谢

2012-01-24 
请教两个基础问题,谢谢1.匿名类的问题publicclassNoName{publicstaticvoidmain(String[]args){Studentstu

请教两个基础问题,谢谢
1.匿名类的问题
public   class   NoName   {

public   static   void   main(String[]   args)   {
Student   stu   =   new   Student()   {
public   void   sayHello()   {
System.out.println( "adf ");
}
};
}
}
这样写为什么一直报错呢?

2.类继承中的构造方法问题
Base.java

public   class   Base   {

public   Base(int   j,   int   k)   {

}

}

Check.java

public   class   Check   extends   Base{

public   Check(int   j){

}
public   Check(int   j,   int   k){
super(j,k);
}
}

Check.java是报错的,但是在Base.java中写出默认的构造方法就可以了。能解释下是什么原理吗?


[解决办法]
public class Base {

public Base(int j, int k) {

}

}
写了一个构造函数,所以默认的被去掉了,new Check(5)的时候没有显式调用父类的构造函数,所以会调用父类默认的构造,而默认的没有,所以会报错


是匿名类了,那么就不可能出现Student str=.......
[解决办法]
Student stu
你没有定义过Student 所以会包错了。

2.java中:你定义一个类,如果不写构造函数,它就默认提供一个无参构造函数。
如果你一旦,定义了构造函数,JAVA就认为你已经提供了构造函数,所以它就不会帮你创建无参构造函数。除非你显式定义。

在你上面的类Check中,
public Check(int j){

}
因为Check是Base的子类,所以在Check构造函数初始化时,它要先调用Base构造函数

而你的public Check(int j)中没有调显示调用Base构造函数,同时,Base中也没有无参构造涵数
所以就出错了。


[解决办法]
加个这个
class Student {

}
我不认为第一个有什么问题
你构造了一个继承Student的匿名类,然后将父类引用指向子类对象.

热点排行