java吧 关注:1,240,350贴子:12,714,407

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

只看楼主收藏回复

又遇见问题咯~~~~
class Parent1 {
Parent1(String s){
System.out.println(s);
} }
class Parent2 extends Parent1{
Parent2(){
System.out.println("parent2");
}
}
这个呢说没有创建父类的隐式的构造方法
class Animal{
private String name;
Animal(String name){
this.name = name;
}

class Cat extends Animal{
private int age;
Cat(String n, int a){
super(n);
age = a;
}
}
这个就没问题,主要是构造方法的问题


223楼2011-12-21 19:31
回复
    - 父类的构造函数是否一定会执行?
    是的,父类的构造函数一定会执行。所以如果某个类的层次很深,那么它创建对象时就会要执行一大堆的构造函数。
    - 是先执行子类的构造函数还是先执行父类的构造函数?
    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
        回复
          如果有吧主,,这贴应该果断加精


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


            228楼2011-12-21 20:09
            回复
              楼主坚持不懈,赞一个
              关于构造函数,你已经了解得很明白了,有两点补充给你:
              1 如果一个类的构造函数都设定为 private ,那么这个类实际上不能被继承(等同于 final类),因为子类找不到任何可以调用的构造方法。
              2 一个类如果设计为要被继承的类,那么它的所有构造方法中都不应该调用任何可以被重写的方法(除了 private 的方法和 final 的方法,其他都是可以被重写(Override)的方法),直接或间接都不应该。(因为这会导致如果某个子类重写了这样的方法,此方法会在子类的构造方法没有完成时即被调用,此时方法中要用到的成员变量可能还没初始化)


              IP属地:澳大利亚229楼2011-12-21 20:19
              回复
                谢谢补充哦


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


                  231楼2011-12-21 21:41
                  回复
                    嘿嘿


                    IP属地:山东232楼2011-12-21 21:52
                    回复
                      其实我才发现本吧无吧主的


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

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


                        235楼2011-12-22 11:11
                        回复
                          LZ,
                          有啥坏想法?趁着这圣诞,元旦什么的,干


                          IP属地:湖北236楼2011-12-22 12:10
                          回复


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


                              238楼2011-12-22 20:59
                              回复