当前位置: 代码迷 >> J2SE >> 父类子类有关问题
  详细解决方案

父类子类有关问题

热度:43   发布时间:2016-04-24 01:10:16.0
父类子类问题
Java code
public class Sub extends Super {    int argA;    static int argB;    int argC = 13;    {        System.out.println("动态语句块:Sub.argA = " + (argA = 11));    }    static{        System.out.println("静态语句块:Sub.argB = " + (argB = 12));    }    Sub(){        //super();        System.out.println("构造方法块:Sub.argC = " + argC);        print();        print(argB);        argA = 30;    }    void print(int argA) {        System.out.println("sub.print(args)");        System.out.println(argA);    }        void print(){        System.out.println("sub.print()");        System.out.println(argA);        System.out.println(argB);    }    public static void main(String[] args) {        System.out.print(new Sub().argA);    }}class Super {    protected int argA = 21;    protected static int argB;    static{        argB = 22;    }    Super() {        print();        print(argA);        argA = 23;    }    void print(int argA) {        System.out.println("super.print(args)");        System.out.println(argA);    }        void print() {        System.out.println("super.print()");        System.out.println(argA);        System.out.println(argB);    }}

执行过程是这样的吗?
static int argB;
int argA;
int argC;
static{
System.out.println("静态语句块:Sub.argB = " + (argB = 12));
}
Sub(){
super();
argC = 13;
  System.out.println("动态语句块:Sub.argA = " + (argA = 11));
System.out.println("构造方法块:Sub.argC = " + argC);
print();
  print(argB);
  argA = 30;
}
求解释。

------解决方案--------------------
顺序+覆盖的问题
------解决方案--------------------
Java code
public class Sub extends Super {    int argA;    static int argB;    int argC = 13;    { //这里应该是在new 一个Sub实例的时候才打印        System.out.println("动态语句块:Sub.argA = " + (argA = 11));    }    static{        System.out.println("------------Sub()静态数据模块.-----------") ;        System.out.println("静态语句块:Sub.argB = " + (argB = 12));    }    Sub(){        //super();        System.out.println("构造方法块:Sub.argC = " + argC);        print();        print(argB);        argA = 30;    }    void print(int argA) {        System.out.println("sub.print(args)");        System.out.println(argA);    }        void print(){        System.out.println("sub.print()");        System.out.println(argA);        System.out.println(argB);    }    public static void main(String[] args) {        System.out.print(new Sub().argA);    }}class Super {    protected int argA = 21;    protected static int argB;    static{        System.out.println("------------Supper()静态数据模块.-----------") ;        argB = 22;    }    Super() {        System.out.println("------------Supper()构造函数 begin.-----------") ;        print();        print(argA);        argA = 23;        System.out.println("------------Supper()构造函数 end.-----------") ;    }    void print(int argA) {        System.out.println("super.print(args)");        System.out.println(argA);    }        void print() {        System.out.println("------------Supper().print() begin .-----------") ;        System.out.println("Supper().argA = " + argA);        System.out.println("Supper().argA = " + argB);        System.out.println("------------Supper().print() end .-----------") ;            }}
------解决方案--------------------
探讨
大家,覆盖问题没什么好谈的吗?为什么执行父类方法,还要被子类给覆盖。
  相关解决方案