java吧 关注:1,241,818贴子:12,715,288

回复:【入驻JAVA吧 记录学习点滴】

取消只看楼主收藏回复

- 父类的构造函数是否一定会执行?
是的,父类的构造函数一定会执行。所以如果某个类的层次很深,那么它创建对象时就会要执行一大堆的构造函数。
- 是先执行子类的构造函数还是先执行父类的构造函数?
Java 会顺着继承结构往上一直找到 Object,然后从 Object 开始往下依次执行构造函数。先执行父类的构造函数,那么子类的构造函数执行的时候就不需要担心父类的成员是否初始化好了。
- 如果父类有多个构造函数,那么 Java 会选择哪一个?
如果父类有多个构造函数,那么子类可以在构造函数中选择其中一个(且最多只能选择一个)来执行。如果子类没有选择,那么 Java 将会执行父类的缺省构造函数。


224楼2011-12-21 19:32
回复
    class Animal{
    private String name;
    Animal(String name){
    this.name = name;
    }
    } class Cat extends Animal{
    private int age;
    Cat(String name, int age){
    // this.name = name;
    // this.age = age;
    super(name);
    this.age = age;
    }
    }
    如果执行注释部分就回报错,因为程序执行构造函数的时候向上找父类的构造方法,父类没有Animal(){};


    225楼2011-12-21 19:48
    回复
      class SupClass {
      SupClass(){
      System.out.println("1");
      }
      SupClass(String s){
      System.out.println("2" + s);
      }
      }
      class SubClass extends SupClass{
      SubClass(){
      System.out.println("3");
      }
      SubClass(String s){
      //super(s);
      System.out.println("4" + s);
      }
      }
      public class Test1{
      public static void main(String[] args) {
      SubClass sc1 = new SubClass("a");
      SupClass sc2 = new SupClass();
      SupClass sc3 = new SubClass();
      }
      }
      这里执行注释部分的super(); 结果会大不一样,说明了子类会找父类烦那一个构造方法
      


      226楼2011-12-21 19:49
      回复
        总结:如果父类没有一个无参的构造方法(缺省构造方法),那么子类必须用super明确的调用父类的某个构造方法!!


        228楼2011-12-21 20:09
        回复
          谢谢补充哦


          230楼2011-12-21 21:40
          回复
            哈哈 留言就是兄弟 让小弟在啵一个!!!!


            231楼2011-12-21 21:41
            回复
              其实我才发现本吧无吧主的


              234楼2011-12-22 11:09
              回复

                为什么我每天运势都这样惨~~~~~~~


                235楼2011-12-22 11:11
                回复


                  237楼2011-12-22 19:55
                  回复
                    今天回过头来看以前做过的50题,发现不少题目可以更清晰一点,这里想整理成一个带详细注释的专门帖子发出来,LZ这几天坚持不懈,力求做出适合更多像我一样的新人能理解的程序。


                    238楼2011-12-22 20:59
                    回复
                      前面的分解因数有问题~~~Test4 不注意还真看不出来


                      239楼2011-12-22 21:44
                      回复
                        import java.util.*; class FenJie {
                        /**
                        * 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
                        * 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
                        * (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
                        * (2)如果n≠k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
                        * (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
                        *
                        */
                        // changeYinShu()方法想达到的效果是调用一次该方法就判断一次调用的参数是不是质数 如果是质数,
                        // 就返回该数 如果不是,就自行返回该数后面一个相邻质数 比如参数为4,就自行返回5
                        public static int changeYinShu(int number) { int i = 2;
                        for (i = 2; i < number; i++) {
                        if (number % i == 0) {
                        // 如果传入的参数不是一个质数,那就自动寻找比这个参数大的而且最靠近它的质数
                        // 其实这个方法,是为了满足下面fenJie()方法里质因数k的需要,找出比k大的一个质数。
                        number++;
                        // 这里将i重新赋值为1,因为continue执行后i会自增,想达到的目的是再次让for循环
                        // 里面的变量i在下次循环是初始为2;
                        i = 1;
                        continue;
                        }
                        } return number;
                        } // k为因数,初始值为2. 这是最小的质因数
                        int k = 2; public int fenJie(int n) {
                        // 递归的出口
                        if (n == k) {
                        System.out.print(k);
                        return k;
                        } else {
                        // 当k是n的一个质因数时,就打印出k,并且将n赋值为 n / k;
                        if (n % k == 0) {
                        System.out.print(k + "*");
                        n = n / k;
                        return fenJie(n);
                        } else {
                        // 若n不能被k整除时,就换下一个质因数,这时调用改变因数changeYinShu()的方法,
                        // 传入的参数为 k + 1,换下一个因数去试
                        k = FenJie.changeYinShu(k + 1); return fenJie(n);
                        }
                        }
                        }
                        } public class Test4 {
                        public static void main(String[] args) {
                        Scanner input = new Scanner(System.in);
                        System.out.println("请输入一个正整数:");
                        int num = input.nextInt(); FenJie fenJieNumber = new FenJie();
                        // 定义好方法后,要想分解一个数,只需要调用fenJie()方法了
                        fenJieNumber.fenJie(num); }
                        }
                        这是修改后的,可是测试的时候发现一个蛋疼的数字,90001 这个数蛋疼~~~ 不知道哪里还有问题,求教啊


                        242楼2011-12-22 22:19
                        回复
                          看下下面的程序


                          243楼2011-12-22 22:20
                          回复
                            欢迎各位努力打酱油


                            244楼2011-12-22 22:20
                            回复
                              我擦~~~~关于90001,错误显示递归太深,引发堆栈溢出~~~~~~~~~~


                              245楼2011-12-22 22:43
                              回复