1,一个之类只能继承一个父类,存在单继承局限

错误程序:

class A {}

class B {}

classC extends A,B{}          // 一个子类继承了两个父类

正确程序:

class A {}

class B extends A {}

classC extends B {}       //这种操作称为多层继承

结论:Java之中只允许多层继承,不允许多重继承,Java存在单继承局限。

2,在一个子类继承的时候,实际上会继承父类之中的所有操作(属性、方法),但是需要注意的是,对于所有的非私有(no private)操作属于显式继承(可以直接利用对象操作),而所有的私有操作属于隐式继承(间接完成)。

class A {

         private String msg ;

         public void setMsg(String msg) {

                   this.msg = msg ;

         }

         public String getMsg() {

                   return this.msg ;

         }                    

}

class B extends A {

         public void print() {

                   System.out.println(msg) ;      // 错误: msg可以在A中访问private

         }

}

public class Test {

         public static void main(String args[]) {

                   B b = new B() ;

                   b.setMsg("张三") ;

                   System.out.println(b.getMsg()) ;

         }

}

3,在继承关系之中,如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化,即:默认情况下,子类会找到父类之中的无参构造方法。

class A {

         public A() {         //父类无参构造

                   System.out.println("*************************");

         }

}

class B extends A {

         public B() {         //子类构造

                   super() ;    // 调用父类构造

                   System.out.println("#########################");

         }

}


public class Test {

         public static void main(String args[]) {

                   B b = new B() ;   //实例化子类对象

         }

}

现在默认调用的是无参构造,而如果这个时候父类没有无参构造,则子类必须通过super()调用指定参数的构造方法。

class A {

         public A(String msg) {         //父类构造

                   System.out.println("*************************");

         }

}

class B extends A {

         public B() {         //子类构造

                   super("Hello") ;         //调用父类构造

                   System.out.println("#########################");

         }

}

public class Test {

         public static void main(String args[]) {

                   B b = new B() ;   //实例化子类对象

         }

}

在任何的情况下,子类都逃不出父类构造的调用,但是,既然super()可以调用父类构造,那么这个语法和this()很相似,那么很明显了,super调用父类构造的时候,一定要放在构造方法的首行上