package com.me;
class Books {
String name;
}
class Book extends Books{
String name;
String author;
public Book(String name){
this.name=name;
}
}
父类中没有构造方法只有默认的构造方法,写子类
的构造方法时不需要用super来初始化父类它会自动
调用父类的默认构造函数
package com.me;
class Books {
String name;
public Books(){
}
/*
public Books(){
this.name="hello";
}
*/
}
class Book extends Books{
String name;
String author;
public Book(String name){
this.name=name;
}
}
此种情况下程序也不会出错,默认的构造方法即是无参数的构造方法,以上两种等同。
package com.me;
class Books {
String name;
public Books(String name){
this.name="hello";
}
}
class Book extends Books{
String name;
String author;
public Book(String name){
this.name=name;
}
}
此时会出错,当父类写了构造函数后父类默认的构造函数就被屏蔽,此时在子类写构造函数时必须调用父类的某个(当父类有多个构造函数时)
构造函数来初始化父类,如下:
package com.me;
class Books {
String name;
public Books(String name){
}
}
class Book extends Books{
String name;
String author;
public Book(String name){
super(name);
this.name=name;
}
}
其中
super(name);
this.name=name;
这两句的顺序不能变,要先初始化父类在初始化子类
因此我们要养成一个习惯:在写一个类的时候先写一个类的空的构造函数如:
public Books(){
}