面向对象(一)

1、类的继承中需要注意的问题

1)、在java中,类只支持单继承,不允许多重继承,也就是说一个类只能有一个直接父类,例如下面这种情况是不合法的。

      class A  {}

      class B  {}

      class C extends A,B  {}       // C类不可以同时继承A类和B类

 

 

2)、多个类可以继承一个父类,例如下面这种情况是允许的。

    class A  {}

    class B  extends A  {}

    class  C extends A  {}         //类B和类C都可以继承类A

 

3)、在java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类,例如C类继承自B类,而B类又可以去继承A类,这时,C类也可以称作A类的子类, 下面这种情况是允许的。

     class A  {}

     class  B  extends  A  {}        //类B继承类A,类B是类A的子类

     class  C  extends  B  {}       //类C继承类B,类C是类B的子类,同时也是类A的子类

 

4)、在java中,子类和父类是一种相对概念,也就是说一个类是某个父类的同时,也可以是另一个类的子类。例如上面的示例中,B类是A类的子类,同时又是C类的父类。

 

 

2、重写父类方法

      在子类中重写的方法需要和父类呗重写的方法具有相同的方法名,参数列表及返回值类型。子类重写父类方法时,不能使用比父类中被重写的方法更严格的访问权限,如父类中的方法是public的,子类的方法不能是private的。

 

 

3、super关键字

1)、使用super关键字调用父类的成员变量和成员方法。格式如下:

        super.成员变量

        super.成员方法([参数1,参数2...])

 

2)、使用super关键字调用父类的构造方法。格式如下:

          super([参数1,参数2...])

          例:

               //定义父类

              class A {

                   //定义父类有参的构造方法

                   public A(String name){

                      System.out.println(“我的名字是”+name);

                  }

              }

 

                 //定义B类继承A类

              class B extends A {

                   public B(){

                      super(“父类”);        //调用父类有参的构造方法

                  }

              }

              

               //定义测试类

              public class Text{

                  public static void main(String [ ] args){

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

                    }

               }

 

          需要注意,通过super调用父类构造方法的代码必须位于子类方法的第一行,并且只能出现一次。

          如果将super(“父类”);        //调用父类有参的构造方法   这行代码去掉,再次编译就会报错,出错的原因是在子类的构造方法中一定会调用父类的某个构造方法。这时可

          在子类的构造方法中通过super指定调用父类的哪个构造方法,如果没有指定,在实例化子类对象时,会自动调用父类无参的构造方法。未解决上述错误,可以在子类中

          显示地调用父类中已有的构造方法,当然也可以选择在父类中定义无参的构造方法,修改上面代码:

               //定义父类

              class A {

 

                  //定义父类无参的构造方法

                   public A(){

                      System.out.println(“我的名字是父类”);

                  }

                   //定义父类有参的构造方法

                   public A(String name){

                      System.out.println(“我的名字是”+name);

                  }

              }

 

                 //定义B类,继承自A类

              class B extends A {

                   //定义B类无参的构造方法

                   public B(){

                       //方法中午代码

                  }

              }

              

               //定义测试类

              public class Text{

                  public static void main(String [ ] args){

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

                    }

               }

              

          运行上面代码就不会报错,可以看出子类在实例化时默认调用了父类无参的构造方法。通过这个可以知道,在定义一个类时,如果没有特殊要求,尽量在类中定义一个无

           参的构造方法,避免被继承时出现错误。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值