黑马程序员_Java面向对象

黑马程序员_Java面向对象
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

面向对象是基于面向过程的一种思想。

      面向过程:以函数为过程,关注实现过程。

      面向对象:以对象为基础,关注实现结果。

面向对象的思想特点:

        A:是一种更符合人们思考习惯的思想。

        B:把复杂的事情简单化了。

        C:把我们从执行者编程了指挥者。

面向对象三要素是:封装、继承、多态。

一:封装:

            封装就是事物抽象为类,把对位接口暴露,将实现和内部数据隐藏。

         (1):隐藏实现细节,提供公共的访问方式。

                 类,方法等其实都是封装的具体体现。

         (2):private关键字

                     A:用于修饰成员变量和成员方法。

                     B:被修饰的内容在其他类中是不可以被访问的。

           (3)常见的应用:

                     类中的所有成员变量私有,给出对应的get/set方法。

代码体现如下:

        class Student

        {

              private String name;

              private int age;

              public Student(){}




           public Student(String name,int age)

            {

                       this.name = name;

                       this.age = age;

            }

            public void setName(String name)

            {

                     this.name = name;

            }

            public String getName()

            {

                     return name;

            }

            public void setAge(int age)

            {

                   this.age = age;

            }

           public int getAge()

            {

                  return age;

            }

     }

2:构造方法:

   (1)格式及特点

       格式:

          访问权限修饰符 类名(参数...){}




   访问权限修饰符:

         public,private

   特点:

      A:方法名和类名相同

      B:没有返回值类型

      C:没有具体的返回值




    (2)注意事项:

         A:如果你不给构造方法,jvm会自动给你一个无参构造方法。

         B:如果你给出了构造方法,那么,jvm将不再提供无参构造方法。

         这个时候,你如果要使用无参构造方法:只能自己提供

3:this关键字:

        (1)是一个关键字。代表当前类的引用。

               简单记:在方法中,哪个对象调用方法,this就代表谁。

        (2)应用场景:

                解决局部变量隐藏成员变量问题。

4:static关键字:

        (1)是一个关键字。可以修饰成员变量和成员方法。


        (2)静态的特点:

              A:随着类的加载而加载

              B:优先于对象存在

              C:被类的所有对象共享

              D:可以通过类名调用

        (3)静态的注意事项:

              A:在静态方法中是没有this关键字的。

              B:静态方法只能方法静态的成员变量和静态的成员方法。


        (4)静态内容的调用:

               A:被对象调用

               B:被类名调用


        (5)什么时候该用static呢?

               如果某个内容是所有对象共享的,就用静态修饰。

二:继承:

       (1)把多个类中的相同的属性和行为进行抽取,封装到一个类中,

         然后再建立新类的时候,不需要从头做起,继承刚才定义的那个类即可。




      (2)好处:

           A:提高代码的复用性。

           B:让类与类之间产生了一个关系,是多态的前提。




      (3)什么时候使用继承?

             A:如果类之间存在着:

                   is a 的关系,就可以考虑使用继承。

             B:不要为了继承部分功能,而去使用继承。




       (4)继承的特点:

              A:Java只支持单继承,不支持多继承。

                   为什么?如果支持多继承,就会有调用不明确的问题。

              B:Java支持多层(重)继承。




        (5)super和this的区别?

               A:super是一个关键字,代表父类的存储空间标识。(可以理解为父亲的引用)

               B:它和this的用法相似

                     a:成员变量

                           this.变量 -- 本类的

                           super.变量 -- 父类的

                     b:构造方法

                           this(...) -- 本类的

                           super(...) -- 父类的

                     c:成员方法

                            this.方法名() -- 本类的

                            super.方法名() -- 父类的




      (6)子父类中成员变量的用法:

              A:名称不同,这个太简单了。

              B:名称相同,子类对象的在使用的时候:

                 先找子类局部范围

                 再找子类成员范围

                 最后找父类成员范围




       (7)子父类中成员方法的用法:

             A:名称不同,这个太简单了。

             B:名称相同,子类对象的在使用的时候:

              先找子类的

              再找父类的

             C:方法重写

                  在子类中,方法声明(修饰符,返回值,方法名,参数列表)相同的情况。

注意事项:

     a:父类中私有方法是不能被重写

     b:子类方法的访问权限一定要大于等于父类的访问权限

     c:静态只能重写静态。(这个不能算,因为静态跟类相关)




    (8)子父类中构造方法的用法:

          A:子类的初始化过程中,首先回去执行父类的初始化动作。

             因为子类的构造方法中默认有一个super()。

     为什么?子类要使用父类的成员变量,这个初始化,必须在子类初始化之前完成。

         所以,子类的初始化过程中,会先执行父类的初始化。

        B:如果父类没有无参构造方法

        A:使用super调用父类的带参构造。推荐方式。

        B:使用this调用本身的其他构造。

三:多态:

   (1)对象在不同时刻表现出来的不同状态。

        举例:水(冰,水,水蒸气)

   (2)多态的前提

        A:要有继承或者实现关系。

        B:要有方法的重写。

        C:要有父类引用或者父接口引用指向子类对象。




   注意:多态有三种体现形式

         类多态

         抽象类多态

         接口多态

(3)多态中的成员特点:

      A:成员变量

          编译看左边,运行看左边。

      B:成员方法

          编译看边,运行看右边。




    为什么?因为方法存在重写,而变量没有。

(4)多态的弊端:

     父类(接口)引用不能使用子类特有功能。

     为了解决这个弊端,我们需要向下转型。




     Fu f = new Zi(); //向上转型

     Zi z = (Zi)f; //向下转型


     Zi z = new Zi();

(5)多态的好处:

         可以提高代码的扩展性和可维护性。

——-Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

你可能感兴趣的:(java日志)