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;

    

  

原文地址:https://www.cnblogs.com/guozhigang/p/9869954.html