- package cn.my;
- class Person{
- private String name;
- private int age;
- Person (){
- System.out.println("父类空参数的构造方法!");
- }
-
- Person (String name,int age){
- this.name = name;
- this.age = age;
- System.out.println("父类有参数的构造方法!");
- }
- }
- class Student extends Person{
- private int id;
- Student (String name,int age,int id){
- //super(name,age);
- this.id = id;
- //super(name,age);
- System.out.println("子类的构造方法!");
- }
- }
- class Test2{
- public static void main (String[] agrs){
- Student s = new Student("wangsan",12,123);
-
- }
- }
复制代码
运行结果:父类空参数的构造方法!
子类的构造方法!
当第一条super存在时,自动将参数回传到有参父类构造方法,程序执行结果:
执行了父类有参构造方法!
子类构造方法执行!
当第二条super存在时,系统编译错误,调用父类构造方法必须为第一行。
- package cn.my;
- class Static1{
- Static1 (){
- System.out.println("父类构造函数!");
- }
- static{
- System.out.println("父类静态");
- }
- {
- System.out.println("父类构代码块!");
- }
- }
- class Static2 extends Static1{
- Static2(){
- System.out.println("子类构造函数!");
- }
- static{
- System.out.println("子类静态");
- }
- {
- System.out.println("子类构造代码块!");
- }
- }
- class Static3{
- static {
- System.out.println("static3的静态构造代码块");
- }
- static void show(){
- System.out.println("static3的show");
- }
- }
- class Test3 {
- public static void main(String[] ages){
- new Static2();
- Static3.show();
- }
- }
复制代码
运行结果:
父类静态
子类静态
父类构代码块!
父类构造函数!
子类构造代码块!
子类构造函数!
static3的静态构造代码块
static3的show
总结:通过此段代码可以了解,随着类的加载静态代码块最先执行,子类的静态代码块优先于父类的构造代码块。父类的构造方法要优先于子类的构造代码块,当父类的构造代码块和构造函数完全执行完,才会执行子类的构造代码块、构造函数。
|
|