一、源码:其中部分注释是测试过程中添加的
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(300);
System.out.println("SubClass("+n+")");
this.n = n;
}
SubClass(){
super(300);
System.out.println("SubClass()");
}
}
public class TestSuperSub{
public static void main(String[] args){
// SubClass sc1 = new SubClass();
SubClass sc2 = new SubClass(400);
}
}
二、测试的几种情况:有些没有写结论,希望相互交流
/*
--前提:在父类和子类中分别含有无参构造函数和有参构造函数
1.在主函数中定义一个子类变量(无参),执行子类中的无参构造函数之前先执行父类的构造函数
a.子类中没有写调用父类的构造函数,则默认调用父类中的无参构造函数。
b.子类中调用父类的无参构造函数,则执行父类中的无参构造函数。
c.子类中调用父类的有参构造函数,则执行父类中的有参构造函数。
2.在主函数中定义一个子类变量(有参),执行子类中的有参构造函数之前先执行父类的构造函数
a.子类中没有写调用父类的构造函数,则默认调用父类中的无参构造函数。
b.子类中调用父类的无参构造函数,则执行父类中的无参构造函数。
c.子类中调用父类的有参构造函数,则执行父类中的有参构造函数。
--结论:上述编译成功
--前提:在子类中含有无参构造函数和有参构造函数,在父类中只含有有参构造函数
1.在主函数中定义一个子类变量(无参),执行子类中的无参构造函数之前先执行父类的构造函数
a.子类中没有写调用父类的有参构造函数
--------------------------------------------------------------------------------------
G:\0_2012相关资料\8_JAVA\1_Project>javac TestSuperSub.java
TestSuperSub.java:16: 错误: 无法将类 SuperClass中的构造器 SuperClass应用到给定类
型;
SubClass(int n){
^
需要: int
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
TestSuperSub.java:22: 错误: 无法将类 SuperClass中的构造器 SuperClass应用到给定类
型;
SubClass(){
^
需要: int
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
2 个错误
=========================================================================================
b.子类中调用父类的有参构造函数
-------------------------------------------------------------------------------------
G:\0_2012相关资料\8_JAVA\1_Project>javac TestSuperSub.java
TestSuperSub.java:16: 错误: 无法将类 SuperClass中的构造器 SuperClass应用到给定类
型;
SubClass(int n){
^
需要: int
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
1 个错误
=========================================================================================
2.在主函数中定义一个子类变量(有参),执行子类中的有参构造函数之前先执行父类的有参构造函数
a.子类中没有写调用父类的有参构造函数
--------------------------------------------------------------------------------------
G:\0_2012相关资料\8_JAVA\1_Project>javac TestSuperSub.java
TestSuperSub.java:16: 错误: 无法将类 SuperClass中的构造器 SuperClass应用到给定类
型;
SubClass(int n){
^
需要: int
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
1 个错误
=========================================================================================
b.子类中调用父类的有参构造函数
-------------------------------------------------------------------------------------
--编译成功
*/
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(300);
System.out.println("SubClass("+n+")");
this.n = n;
}
SubClass(){
super(300);
System.out.println("SubClass()");
}
}
public class TestSuperSub{
public static void main(String[] args){
// SubClass sc1 = new SubClass();
SubClass sc2 = new SubClass(400);
}
}
二、测试的几种情况:有些没有写结论,希望相互交流
/*
--前提:在父类和子类中分别含有无参构造函数和有参构造函数
1.在主函数中定义一个子类变量(无参),执行子类中的无参构造函数之前先执行父类的构造函数
a.子类中没有写调用父类的构造函数,则默认调用父类中的无参构造函数。
b.子类中调用父类的无参构造函数,则执行父类中的无参构造函数。
c.子类中调用父类的有参构造函数,则执行父类中的有参构造函数。
2.在主函数中定义一个子类变量(有参),执行子类中的有参构造函数之前先执行父类的构造函数
a.子类中没有写调用父类的构造函数,则默认调用父类中的无参构造函数。
b.子类中调用父类的无参构造函数,则执行父类中的无参构造函数。
c.子类中调用父类的有参构造函数,则执行父类中的有参构造函数。
--结论:上述编译成功
--前提:在子类中含有无参构造函数和有参构造函数,在父类中只含有有参构造函数
1.在主函数中定义一个子类变量(无参),执行子类中的无参构造函数之前先执行父类的构造函数
a.子类中没有写调用父类的有参构造函数
--------------------------------------------------------------------------------------
G:\0_2012相关资料\8_JAVA\1_Project>javac TestSuperSub.java
TestSuperSub.java:16: 错误: 无法将类 SuperClass中的构造器 SuperClass应用到给定类
型;
SubClass(int n){
^
需要: int
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
TestSuperSub.java:22: 错误: 无法将类 SuperClass中的构造器 SuperClass应用到给定类
型;
SubClass(){
^
需要: int
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
2 个错误
=========================================================================================
b.子类中调用父类的有参构造函数
-------------------------------------------------------------------------------------
G:\0_2012相关资料\8_JAVA\1_Project>javac TestSuperSub.java
TestSuperSub.java:16: 错误: 无法将类 SuperClass中的构造器 SuperClass应用到给定类
型;
SubClass(int n){
^
需要: int
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
1 个错误
=========================================================================================
2.在主函数中定义一个子类变量(有参),执行子类中的有参构造函数之前先执行父类的有参构造函数
a.子类中没有写调用父类的有参构造函数
--------------------------------------------------------------------------------------
G:\0_2012相关资料\8_JAVA\1_Project>javac TestSuperSub.java
TestSuperSub.java:16: 错误: 无法将类 SuperClass中的构造器 SuperClass应用到给定类
型;
SubClass(int n){
^
需要: int
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
1 个错误
=========================================================================================
b.子类中调用父类的有参构造函数
-------------------------------------------------------------------------------------
--编译成功
*/
转载于:https://blog.51cto.com/weifeng10wu/862500