Java面向对象 三

----------继承

          将重复代码抽取到父类中,

          有点:方便修改代码,减少冗余。

           子类与父(基)类是is--a的关系

使用继承:

          父类      class  xx{

          子类      class  xx extends xx{        

       1,继承与真实世界类似符合is—a关系的可使用继承

       2,继承是代码重用的一种方式,将子类共有的属性和行为放到父类中

理解继承:

      子类继承父类的什么?

      1,继承public 和 protected修饰的属性和方法,不管子类与父类是否在一个包里

      2,继承默认权限修饰符修饰的属性与方法,但子类与父类必须在同一个包里

不能被继承的父类成员

                访问父类构造方法

                super();

                super(name);

               访问父类属性

               super.name;

               super.print();

ps:    1,使用super关键字,super代表父类对象

         2,在子类构造方法中调用,且必须是第一句

         3,不可以访问父类中定义为private的属性和方法

super关键字来访问父类的成员

         1,super只能出现在子类的方法和构造方法中

         2,super调用构造方法时,只能是第一句

         3,super不能访问父类的private成员

super的使用

         1,子类方法重写父类方法

         2,在子类中定义了和父类同名的成员变量(super可以使被屏蔽的成员可见)

super与this:

          区别                                    this                                              super

      访问属性                    访问本类属性                               访问父类属性

                                     如果没有则从父类找

      访问方法                   访问本类方法                                访问父类方法

                                    如果没有则从父类找     

      访问构造                   调用本类构造                               调用父类构造

                                    放在构造方法前                                  放在子类构造方法前

方法调用规则

          1,子类构造方法 没有通过super显示调用父类的有参构造方法  也没通过this显示调用自身其他构造方法

              (系统默认调用父类的无参构造方法)

          2,子类构造方法通过super显示调用父类有参方法(执行父类相应构造方法,而不执行父类无参方法)

          3,子类构造方法通过this显示调用自身其他构造方法在相应构造方法中y应用以上两条规则

单根继承(唯一支持的)

          可以有一个直接父类,但可以有多个间接父类

如何访问父类的父类的成员?

         不管是什么父类,只能用super来引用

Ps:直接或间接父类 都是object类(祖宗类)

继承的利于弊

              利:提高了代码的可重用性,可扩展性性

              弊:过于复杂的层次结构会影响代码的可重用性。

         最佳:2-3层

方法重写规则:

               1,方法名相同

               2,参数列表相同

               3,返回值类型相同或是其子类

               4,访问权限不可严于父类

               5,父类的静态方法不能被子类覆盖为非静态,非静态也不能被覆盖为静态

               6,子类可以定义于父类同名的静态方法  以便在子类中隐藏父类的静态方法(静态方法中无法使用super)。

               7,父类的私有方法不能被子类覆盖

               8,不能抛出比父类方法更多的异常

Object类:

              是所有类的直接或间接父类

Object类被子类经常重写的方法

              toString()  返回当前对象本身的有关信息,按字符调用对象返回

             equals()比较两个对象是否为同一个,是则返回true

             hashCode()  返回该对像的哈希代码值

            getClss()获取当前对象所属类的信息,返回class对象

        equals()方法:

                   操作符  ==

                   简单数据类型 直接比较  如1==2

                  引用类型      比较两者是否tong同一对象

       (1)Object类的equals方法于“==”没有区别

       (2)当有特殊需求时 如认为属性相同即为同一对象时需要写equals

       (3)Java,lang,Stringchon重写了equals方法  把equals方法的判断变为了判断其值

instanceof    用于比较一个引用类型是否属于同一个类的实例。

猜你喜欢

转载自blog.csdn.net/luvhl711/article/details/81262899