继承;方法重写;构造方法重载super;this

继承:

      现实世界中:通过分析多种类型,然后发现有一些共同特征和共同行为

                            再将这些种类,归纳为一种新类型

                            如:  黄色皮肤的人

                                      白色皮肤的人

                                      黑色皮肤的人

                     |

                                         人

                                       

                            再如:    小狗 --能动,能吃,能睡,能叫(汪汪)

                                              小猫--能动,能吃,能睡,能叫(喵喵)

                        .......

                       |

                                          动物

   计算机语言中:

               先编写父类类型,在编写子类型,然后再有对象。

               如:  先编写Animal类型

                         再编写 Dog类或Cat类型        

继承父类的成员变量和方法

                再使用数据时,要么创建Dog对象/Cat对象                                                          

      子类可以从父类中继承一些成员变量,和方法。子类还可以添加自己的

      独有成员变量和方法。

    

      子类:也叫派生类

      父类:也叫超类,基类   

 

关键字extends,用于继承语法

      格式:

      public class subClass extends SuperClass{

       }  

继承中的构造器:

         子类不能继承父类的构造器,但是,子类中的构造器可以调用

         父类的构造器

         语法: super(有参传参);

          作用:可以更好的给继承过来的成员变量赋值

         

 PS:子类中的构造器一定会有一个调用了父类的构造器

              父类中如果没有无参构造器,子类需要显式调用父类构造器

              如果父类中有无参构造器,子类中的构造器可能隐式调用

              父类的无参构造器.即:隐藏了super()

              

    super()与this()的区别

         相同点:都是调用构造器,而且必须放在首行首句。

     不同点:super()是调用父类的构造器

         this()是调用本类中其他构造器

 

继承的传递性:

             继承特征有传递特性,B类型继承了A类型的特征,C类型继承了

             B类型的特征。C类型也间接继承了A类型的特征

继承的另外一特点:

            单继承: 一个子类只能继承一个父类。但是一个父类可以有

                          多个子类       

 一个源文件中,只能有一个public修饰的类,而且此类必须与文件名一致。

  其他类可以不用修饰词

  main也需要在public修饰的类中,才能生效。

】   

方法的重写(override)

        子类可以继承父类的方法,在继承时,我们可以在子类中

         编写与父类中的方法名相同,参数列表也相同的方法。这就是

        重写。

      

    (1)父子类关系,方法名相同,参数列表相同

    (2)返回值类型可以相同,也可以不同

            [子类方法的返回值类型必须是父类方法的返回值类型的子类]    

 

父类型的变量可以引用子类型的对象

    如:

      Animal a = new GoldFish();

      Animal类型的变量a引用了子类型GoldFish的对象   

      符合人类的思维:

                    这条金鱼是动物    

                    

编译期绑定:

    在编译过程中,变量只能调出本类型中的方法

     在编译期间,  方法静态绑定到变量上

运行期绑定

    在运行过程中,真正执行的方法的逻辑与对象的类型有关系。

    简单说成:方法在运行期间,动态绑定到对象上。

    成员变量的调用与变量的类型有关系(与编译期和运行期无关)     

     

【在创建子类对象时,在内存中会不会产生父类对象??】

【答案1: 会产生,没有父类对象,哪来的子类对象】

【答案2: 不会产生,创建子类对象时,子类对象的成员变量包含两部分:

       一部分为从父类中继承过来的

               在成员变量前有默认的super.

       一部分是自己本类中的

               在成员变量前有默认的this.

               

        如果子类中独有的与继承过来的成员变量重名时,必须

        显式指定使用super.或者是this.

        如果子类中没有与继承过来的成员变量相同名时,我们可以

        隐式不写,或者使用super.与this.其中任意一个。         

        

         为了避免不必要的麻烦,子类的成员变量尽可能不要与父类的

         成员变量同名       

】   

构造方法重载:

 

显式调用父类有参构造器:

隐式调用父类有参构造器:

子类继承父类后再加一个成员变量:

父类型的变量引用子类型的对象

变量p有父类Person的方法

没有子类Student另添加的stduy方法

父类有形参,显式调用

父类无形参,显式调用

猜你喜欢

转载自blog.csdn.net/K_KingoneTen/article/details/81346975