先看代码1:
class Demo_11 {
public static void main(String[] args) {
A a= new A();
a.print();
}
}
class A{
String s;
public void print(){
System.out.println(s);
}
}
代码2:
class Demo_11 {
public static void main(String[] args) {
A a= new A();
a.print();
}
}
class A{
String s;
A(){
}
A(String s){
this.s=s;
}
public void print(){
System.out.println(s);
}
}
运行结果都为null; 但是如果我们将代码2中类A的构造方法A删掉就会报错,是什么原因导致这样的问题呢?是因为代码2中类A的构造方法A(String)把类A的默认构造方法覆盖了,所以在主函数创建对象时用的构造方法是默认构造方法,这样就与类A中的构造方法不一致了,所以会报错。因此如果我们在创建对象时要注意,类的构造方法是否被重载了。
注意:如果一个类要设计为扩展的。最好提供一个无参构造方法以避免程序设计错误,如以下代码
public class A extends B{
}
class B{
public B(String name){
System.out.println("A and B");
}
}
由于在A中没有显示的定义构造方法,因此,A的默认无参构造方法被隐式的调用,因为A是B的子类,所以A的默认构造方法会自动的调用B的无参构造方法,然而B没有无参构造方法,因为B显示的定义了构造方法,因此,程序不能被编译。
最好能为每一个类提供一个无参构造方法(如需要的话),以便于对该类进行扩展同时避免错误。
以上是个人学习JAVA的一些小心得,如若有错,欢迎探讨