java定义的方法分为普通方法(有返回类型)和构造方法(无返回类型),其中构造方法是用来初始化对象的
在调用构造方法时出现错误:constructor call must be the first statement in a constructor
解决:this()和super()的调用只能在构造方法中的第一行
public SuperSample() {
this(0);
this.y = 0;
还可能出现一个问题:recursive(递归) constructor invocation
解决:构造器中出现了递归调用。这是不被允许的。重载的构造器之间彼此互相调用、构造器调用自身,都会出现此编译错误
并且构造方法必须满足以下语法规则:
(1)方法名必须与类名相同;(我就是不同,所以一直不知道哪错了)
(2)不要声明返回类型;
(3)不能被static、final、synchronized、abstract和native修饰;
(4)构造方法不能被子类继承,所以用final和abstract修饰没有意义。
转载于这里
加上上面说的问题
(5)this()调用本类构造方法和super()调用父类构造方法时,语句都必须放在第一行;
(6)构造方法之间不能相互调用;
如何调用某类中的构造方法?
package java3_3;
abstract class people{
public abstract void speak();
}
class Chinese extends people{
public void speak() {
System.out.println("chinese");
}
}
class American extends people{
public void speak() {
System.out.println("english");
}
}
class Anypeople extends people{
people p;
public Anypeople(people p)
//这里定义了构造方法
{
this.p = p;
}
public void speak() {
p.speak();
}
}
public class Sample{
public static void main(String[] args) {
people ren;
Chinese chinese = new Chinese();
American american = new American();//普通方法的调用第一步创建对象
Anypeople ap = new Anypeople(chinese);//构造方法的调用
ren = chinese;
ren.speak();
ren = american;//第二步,感觉像是让抽象类继承子类American
ren.speak();//第三步,调用方法(此时无论是在父类还是在子类中的方法都可以调用)
ap.speak();
}
}
//普通方法,在调用时需要先创建所属类的对象,再调用方法
//而构造方法则是直接创建构造方法的对象