• Java基础---面向对象


      一、说到java的面向对象,会有几个耳熟能详的概念。继承、封装、多态。这里简单描述一下:

    1. 继承:通过extends关键字修饰,表示两个类之间的关系为父子类关系,子类具有父类的属性及方法。可以重写;

          在继承中值得注意的是:

        • 能够继承父类的public和protected成员变量;不能够继承父类的private成员变量;
        • 对于父类的包访问权限(frindly)成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
        • 对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用;
        • 继承只能单继承,但是实现(implements)可以多实现。
        • 子类是不能够继承父类的构造器,如果父类没有无参构造,那么子类必须通过supper关键字调用父类有参构造,并传参。
    1. 封装:其实就是对属性私有化,并通过geter和setter开放对属性的访问;
    2. 多态:父类引用指向子类对象,相当于以父类的形态去执行子类对象。

        多态是建立在继承的基础之上的,要体现多态的话,就要有方法的重写,如果只是继承过来,又不做其他任何操作,等于不继承。但是有的方法是不能够被重写的:

        • 因为被static修饰的方法是属于类的,而不是属于实例的;
        • final方法,因为被final修饰的方法无法被子类重写;
        • private方法和protected方法,前者是因为被private修饰的方法对子类不可见。

      二、下面再理解一下几个关键字

    • static

        可以修饰属性、方法、类以及代码块。

      • 修饰属性和方法表示属性和方法属于类,可以通过类访问,不必new对象。
      • 修饰类的时候一般用在内部类(静态内部类),和普通内部类不同的是可以不用创建外部类对象从而实例化内部类。
      • 修饰代码块用的比较少,只是表示在类初始化的时候执行一些代码。
    • fiinal

        被final修饰的类不可以被继承;被final修饰的方法不可以被重写;被final修饰的变量不可以被改变(引用不可变)。

    • public,protect,frindly,private

        主要了解一下作用范围。frindly本身是不存在的,在不写的情况下给一个名称而已。

        

      三、接口及抽象类

      接口和抽象类在java中也是随处可见。主要的特点是他们可以包含没有方法体的抽象方法,仅定义了方法的返回值类型参数类型这些基本的东西以及有abstract修饰该方法。

    • 抽象类

        一个类中包含有抽象方法,该类必须为抽象类。并且要用abstract修饰该类。抽象类中的抽象方法必须由public或protected修饰,可以缺省为public。对于继承抽象类的类,必须实现抽象类的抽象方法,否则该类也只能定义为抽象类。

    • 接口

        接口和抽象类有些类似。接口中只能含有抽象方法,且抽象方法必须是public abstract修饰,缺省时默认为public abstract。且在接口中定义的变量都为public static final修饰,即常量。

    • 两者区别  
      • 抽象类可以有方法的实现(非抽象方法),而接口中只能存在public abstract 方法;
      • 抽象类中的成员变量可以是各种类型(和普通类一样),而接口中的成员变量只能是public static final的;
      • 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
      • 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

      如何考虑是定义为接口还是抽象类呢?大多数时候,如果要属性抽象,则用抽象类,该类能体现子类的基本拥有的属性;如果对方法(功能)的抽象,则定义为接口,接口只说明该类具有什么功能。

    参考资料:

        http://www.cnblogs.com/dolphin0520/p/3811437.html;

        https://www.cnblogs.com/xrq730/p/4820992.html;

        

      

  • 相关阅读:
    Visualizing Concurrency in Go · divan's blog
    Trac常用插件描述!
    分布式 OLTP 数据库
    【SDCC讲师专访】PingCAP联合创始人兼CEO刘奇:好的产品应开源,不闭门造车-CSDN.NET
    XiaoMi/themis: Themis provides cross-row/cross-table transaction on HBase based on google's percolator.
    TiDB首页、文档和下载
    TeamGantt vs JIRA 2016 Comparison | FinancesOnline
    HandlerInterceptor拦截实现对PathVariable变量的读取
    大叔来说说Markdown的使用
    springcloud~配置中心实例搭建
  • 原文地址:https://www.cnblogs.com/guozhigang/p/9869954.html
Copyright © 2020-2023  润新知