`
henryyang
  • 浏览: 108586 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
文章分类
社区版块
存档分类
最新评论

Java什么是面向对象和面向对象特性

阅读更多

 找工作,面试官都会问起什么是面向对象。对于这种问题也没有唯一的说法吧。自己感觉
  要结合实际来说吧。以下通过面向对象的概念和面向对象特性来理解什么是面向对象

   面向对象其实是现实世界模型的自然延伸。现实世界中任何实体都可以看作是对象。对象之间通过消息相互作用。另外,现实世界中任何实体都可归属于某类事 物,任何对象都是某一类事物的实例。如果说传统的面向过程式编程语言是以过程为中心以算法为驱动的话,面向对象的编程语言则是以对象为中心以消息为驱动。 用公式表示,过程式编程语言为:程序=算法+数据;面向对象编程语言为:程序=对象+消息。

所有面向对象编程语言都支持三个概念:封 装、多态性和继承,Java也不例外。现实世界中的对象均有属性和行为,映射到计算机程序上,属性则表示对象的数据,行为表示对象的方法(其作用是处理数 据或同外界交互)。所谓封装,就是用一个自主式框架把对象的数据和方法联在一起形成一个整体。可以说,对象是支持封装的手段,是封装的基本单位。Java 语言的封装性较强,因为Java无全局变量,无主函数,在Java中绝大部分成员是对象,只有简单的数字类型、字符类型和布尔类型除外。而对于这些类 型,Java也提供了相应的对象类型以便与其他对象交互操作。

多态性就是多种表现形式,具体来说,可以用"一个对外接口,多个内在实现 方法"表示。举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型,浮点或字符。不管存储的是何种数据,堆栈的算法实现是一样的。针对不同的数据 类型,编程人员不必手工选择,只需使用统一接口名,系统可自动选择。运算符重载(operator overload)一直被认为是一种优秀的多态机制体现,但由于考虑到它会使程序变得难以理解,所以Java最后还是把它取消了。

继承 是指一个对象直接使用另一对象的属性和方法。事实上,我们遇到的很多实体都有继承的含义。例如,若把汽车看成一个实体,它可以分成多个子实体,如:卡车、 公共汽车等。这些子实体都具有汽车的特性,因此,汽车是它们的"父亲",而这些子实体则是汽车的"孩子"。Java提供给用户一系列类 (class),Java的类有层次结构,子类可以继承父类的属性和方法。与另外一些面向对象编程语言不同,Java只支持单一继承。

其实在没有面向对象的世界里也有继承,编程语言都支持int直接转换为float,这叫低类型转换为高类型。类是其实一个自定义数据类型,父类是高类型,子类是低类型。


Java面向对象特性
1.继承(Inheritance)
继承是面向对象编程的核心机制之一,其作用是在已有类型基础之上进行扩充或改造,得到新的数据类型,以满足新的需要.
语法格式如下:
[<修饰符>] class <类名> [extends<父类名>]{
[<属性声明>]
[<构造方法声明>]
[<方法声明>]
}

2.类之间的关系
1)依赖关系(Dependency):指一个类的方法中使用到了另一个类的对象,此时我们称前者依赖后者.("use-a")的关系
2)聚合关系(Aggregation):指一个类的对象包含(通过属性引用)了另一个类的对象.("has-a")的关系
3)泛化关系(Generalization):表示的是类之间的继承关系(还包括类与接口之间的实现关系以及接口之间的继承关系).("is-a")关系

3.访问控制(access control)
修饰类一般只有:public,default
修饰属性和方法有:public, protected, default,private

4.方法重写(overwrite)
在子类继承父类时,子类可以重写父类的方法.方法重写必须遵守下面的原则:
1)重写方法必须和被重写方法具有相同的方法名称,参数列表和返回值类型
2)重写方法不能使用比被重写方法更严格的访问权限
3)重写方法不允许声明抛出比被重写方法范围更大的异常类型.(可以不抛出异常,或者只能抛出相同的异常)

5.super关键字
子类继承父类时,在子类中可以使用super来引用父类中的成分.在构造方法中使用super()语句,必须位于子类构造方法的第一行.
格式有:
super.<属性名>:访问父类中的属性
super.<方法名>(<实参列表>):访问父类中的成员方法
super(<实参列表>):在子类构造方法中调用父类的构造方法

6.多态(Polymorphism)
多态:把子类对象可以替代父类对象使用
instanceof运算符:用于检测一个对象的真正类型,格式:
<变量名>instanceof<类型>
JDK5.0允许重写方法时修改其返回值的类型,但必须是父类方法返回值类型的子类或实现类类型.

7.方法重载(overload)
在一个类中存在多个同名方法的情况下,使用方法重载.
this(<实参列表>):只能出现在构造方法中,且this()语句如果出现必须位于方法体中代码的第一行.用来调用同一类中的其他重载构造方法.

8.Java对象构造和初始化
语法规则如下:
1)在子类的构造方法中可使用super语句调用父类的构造方法,格式:super(<实参列表>)
2)如果子类的构造方法中既没有显式地调用父类构造方法,也没有使用this关键字调用同一个类的其他重载构造方法,则系统会默认调用父类无参数的构造方法,格式:super()
3)如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错.
Java对象构造和初始化的处理细节如下:
第一阶段:为新建对象的实例变量分配存储空间并进行默认初始化
第二阶段:按下述步骤继续初始化实例变量
1)绑定构造方法参数;
2)如有this()调用,则调用相应的重载构造方法,然后跳转到步骤5;
3)显式或隐式追溯调用父类的构造方法(Object类除外);
4)进行实例变量的显式初始化操作
5)执行当前构造方法的方法体中其余的语句

9.抽象类(abstract class)
抽象方法(abstract method):只给出方法头(包括方法名,形式参数列表,返回值类型及修饰符),而不必给出方法体,即方法实现的细节.格式如下:
[<修饰符>]abstract <返回值类型> <方法名> ([<参数列表>])
注意:
1)包含抽象方法的类必须声明为抽象类,但不包含任何抽象方法的java类也可以声明为抽象类
2)子类可以不全部实现抽象父类,但子类也必须声明为抽象类
3)父类不是抽象类,子类可以添加抽象方法,成为抽象类
4)抽象类可以声明static属性和方法.

10.接口(interface)
格式:
[<modifier>] class <name> [extends<superclass>] [implements<interface>[,<interface>]*] {
declarations *
}

11.嵌套类(Nested Class)
嵌套类分为:使用static修饰的嵌套类称为静态嵌套类(Static Nested Class),非static的嵌套类称为内部类(Inner Class),内部类可以分为:
1)普通的内部类:在Java类中,方法或语句块的外部定义的非static类
2)局部内部类:也称局部类(Local Class),定义在方法或语句块中的类
3)匿名内部类:也称匿名类(Anonymous Class),定义在方法或语句块中,该类没有名字,只能在其所在之处使用一次.

12.断言(assert)
断言机制允许Java开发者在代码中加入一些检查语句,主要用于程序调试目的.功能:在用户定义的boolean表达式(判定条件)结果为false时抛出一个Error对象,其类型为AssertionError.
语法格式:
assert <boolean 表达式>;
执行到assert语句时,如果其后的boolean类型表达式值为false,则程序将抛出AssertionError.

assert<boolean 表达式>:<表达式2>;
断言失败时,系统会自动将<表达式2>的值传递给新创建的AssertionError对象,进而将其转换为一个消息字符串保存起来.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics