首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

父类子类有关问题

2012-05-04 
父类子类问题Java codepublic class Sub extends Super {int argAstatic int argBint argC 13{System

父类子类问题

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 .-----------") ;            }}
[解决办法]
探讨
大家,覆盖问题没什么好谈的吗?为什么执行父类方法,还要被子类给覆盖。



[解决办法]
探讨

引用:
大家,覆盖问题没什么好谈的吗?为什么执行父类方法,还要被子类给覆盖。

我认为是这样的:
System.out.print(new Sub().argA);
当前对象的类型是Sub,传入父类构造函数的对象类型就是Sub
父类中print()等价于this.print(),此时this类型是刚才传入的对象类型Sub
这一点可以通过代码验证
Java co……

热点排行