class SuperClass {
private int n;
SuperClass() {
System.out.println("SuperClass()");
}
SuperClass(int n) {
System.out.println("SuperClass(" + n + ")");
this.n = n;
}
}class SubClass extends SuperClass {
private int n;
SubClass(int n) {
//super();
System.out.println("SubClass(" + n + ")");
this.n = n;
}
SubClass() {
super(300);
System.out.println("SubClass()");
}
}public class TestSuperSub {
public static void main(String arg[]) {
SubClass sc1 = new SubClass();
SubClass sc2 = new SubClass(400);
}
}SubClass extends SuperClass ,所以在用SubClass new 对象的时候需要用super new父类的对象,但是在
class ThisClass{
private int age;
private String name;
ThisClass(int _age,String _name){
this.age=_age;
this.name=_name;
System.out.println(name+"is"+age);
}
}
public class ThisPro extends ThisClass{
public static void main(String[] args){
ThisClass new1=new ThisClass(12,"xiaohong");
ThisClass new2=new ThisClass(25,"xiaoliang");
}
}
中直接用父类ThisClass new对象,为什么还要在ThisPro里面写super new父类对象呢???
private int n;
SuperClass() {
System.out.println("SuperClass()");
}
SuperClass(int n) {
System.out.println("SuperClass(" + n + ")");
this.n = n;
}
}class SubClass extends SuperClass {
private int n;
SubClass(int n) {
//super();
System.out.println("SubClass(" + n + ")");
this.n = n;
}
SubClass() {
super(300);
System.out.println("SubClass()");
}
}public class TestSuperSub {
public static void main(String arg[]) {
SubClass sc1 = new SubClass();
SubClass sc2 = new SubClass(400);
}
}SubClass extends SuperClass ,所以在用SubClass new 对象的时候需要用super new父类的对象,但是在
class ThisClass{
private int age;
private String name;
ThisClass(int _age,String _name){
this.age=_age;
this.name=_name;
System.out.println(name+"is"+age);
}
}
public class ThisPro extends ThisClass{
public static void main(String[] args){
ThisClass new1=new ThisClass(12,"xiaohong");
ThisClass new2=new ThisClass(25,"xiaoliang");
}
}
中直接用父类ThisClass new对象,为什么还要在ThisPro里面写super new父类对象呢???
比如
class A {
///
}class Test {
public static void main(String[] args) {
A a = new A(); //A没有显式声明构造函数,所以系统创建一个默认的无参数的构造函数,
//所以可以new A();
}
}当显式声明构造函数是,系统就不会再创建默认的无参的构造函数,比如
class A {
public A(int a) {}
}class Test {
public static void main(String[] args) {
A a = new A(); //A显式声明构造函数,所以系统不会创建一个默认的无参数的构造函数,
//所以不可以new A();必须调用显式的构造函数new A(10);带个参数
}
}
//同样的,子类也必须要显式调用父类有参数的构造函数
class B extens A {
public B() {} //这样是不行的,因为没有A没有默认的构造函数,
/所以父类内存没法创建,B对象也就不能创建 public B() {super(10);} //这样是可以的,因为子类显式调用父类构造函数,
//父类内存可以创建,所以B对象就能创建
}