Java面向对象编程

来源:互联网 发布:节奏大师网络被拦截 编辑:程序博客网 时间:2024/05/05 16:28

---------------------- android培训、java培训、期待与您交流!

Java面向对象

面向对象的设计思想在考虑问题时,以具体的事物(对象)为单位,考虑它的属性(特征)及动作(行为),关注整体。

一.面向对象概念

对象:对象就是某个具体的事物,比如一个苹果、一台计算机都是一个对象。每个对象都是唯一的。对象可以是一个实物,也可以是一个概念;比如一个苹果、一项政策。现实生活中万事万物皆对象,面向对象的设计思想(OOP)主要是模拟现实生活中的一个个对象来编程的。对象具有属性和行为。

抽象:所谓的抽象,即抽取,也叫提炼或归纳总结等。主要用来把客观世界中真实存在的事物用编程语言描述出来。这也是理解面向对象编程思想的第一步。通过抽象将现实生活中的对象模拟或映射到计算机中。

:现实生活中任何实实在在的具体物体都叫对象,通过面向对象的抽取思想,根据很多实体的行为特征可以抽取出很多的对象,然后再通过归纳总结,将这些对象分门别类;类可以理解为对事物的分类。类是构成Java面向对象编程的最小封装单元。在Java中通过关键字class定义自定义的数据类型。Java中通过类来封装现实生活中对象的各个信息。类可以封装数据。

类和对象的关系:类是对象的类型,要创建对象就要先创建它的数据类型,即类。类描述了对象的属性和行为。类是对象的模板和图纸。对象是类的一个实例,是一个实实在在的的个体。由对象可以抽取出类,类可以实例化成对象。

 

二,面向对象的特征
1.
封装

所谓封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。封装有两层含义,其一是隐藏内部行为,即隐藏内部方法,调用者只能看到对外提供的公共方法。其二是隐藏内部信息,即隐藏内部数据成员。现在都建议不要对外公开任何数据成员,即使是外部需要知道的数据成员,也只能通过函数获取。

封装的好处:封装可以隔离变化、提高易用性、提高安全性、提高重用性。

封装的原则:

将不需要对外提供的内容都隐藏起来。把属性都隐藏,提供公共方法对其访问


2.
继承

继承的概述:

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继那个类即可。

多个类可以称为子类,单独这个类称为父类或者超类。

子类可以直接访问父类中的非私有的属性和行为。

通过 extends 关键字让类与类之间产生继承关系。

class SubDemo extends Demo{}

  继承的好处:

继承的出现提高了代码的复用性。

继承的出现让类与类之间产生了关系,提供了多态的前提。

继承的特点:

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

一个类只能有一个父类,不可以有多个父类。

class SubDemo extends Demo{} //ok

class SubDemo extends Demo1,Demo2...//error

Java支持多层继承(继承体系)

class A{}

class B extends A{}

class C extends B{}

定义继承需要注意:

不要仅为了获取其他类中某个功能而去继承

类与类之间要有所属( " is a " )关系,xx1xx2的一种。

继承中的相关概念:

a.覆写:

子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重写或者复写。

父类中的私有方法不可以被覆盖。

在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名获取。

覆盖注意事项:

•    覆盖时,子类方法权限一定要大于等于父类方法权限

•    静态只能覆盖静态。

覆盖的应用:

•    当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复   写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。

b.子类的实例化过程:

子类中所有的构造函数默认都会访问父类中空参数的构造函数

因为每一个构造函数的第一行都有一条默认的语句super();

子类会具备父类中的数据,所以要先明确父类是如何对这些数据初始化的。

当父类中没有空参数的构造函数时,子类的构造函数必须通过this或者super语句指定要访问的构造函数。


3.
多态

程序中体现:父类或者接口的引用指向或者接收自己的子类对象。

好处和作用:多态的存在提高了程序的扩展性和后期可维护性

前提:需要存在继承或者实现关系

要有覆盖操作

多态的特点:

a.    成员方法:

编译时:要查看引用变量所属的类中是否有所调用的成员。

在运行时:要查看对象所属的类中是否有所调用的成员。

b.  成员变量 
只看引用变量所属的类。

 

三,面向对象的优点

  
将一类客观存在的事物抽象成一个类,其中包含了事物的特征与行为,然后根据类创建不同方法、属性的对象,可以操作对象完成相应的工作,调用者只需调用它的方法,怎么实现的根本不需要去了解,从而程序员就成为了一个指挥者的角色,可以轻松的操作对象,需要哪类事物,就创建那种对象。


四,面向对象中的一些概念
1:)
成员变量:在类中直接定义的变量叫做成员变量,也可以叫做类的属性!
2:)
局部变量:在一个方法中声明的变量就是局部变量,它的生命周期是这个方法体内!
注意:如果在一个方法中的变量与类中的成员变量名相同时,默认先在此方法体中找,找到了就调用,找不到调用成员变量!
如果一定要调用类中的成员变量,可以是用this关键字进行调用!
3:)
对象的建立以及初始化过程
    
Person p = newPerson()

(1)Person.class文件加载进内存.

(2)在栈内存空间中开辟一个变量空间p

(3)在堆内存中给对象分配空间。

(4)给对象中的属性进行默认初始化。

(5)给对象中的属性进行显示初始化。

(6)调用构造代码块对对象进行初始化。(执行类中的构造代码块,没有就不执行)

(7)调用对应的构造函数进行对象初始化。对象初始化完毕。

(8)将对象的内存地址赋值给p变量,让p变量指向该对象。


4:
)对象的生命周期
对象的声明周期由关键字new开始,当没有任何引用指向对象时,对象的生命周期结束,被销毁!
5:)
匿名对象
当一个对象我们只是是用一次的时候,可以把这个对象声明为匿名对象,它没有任何引用,通常作为一个实参传给方法!

6:) static 关键字
    用于修饰成员(成员变量和成员函数)

被修饰后的成员具备以下特点:

•    随着类的加载而加载,生命周期最长。

•    优先于对象存在

•    被所有对象所共享

•    可以直接被类名调用

使用注意

•    静态方法只能访问静态成员

•    静态方法中不可以写thissuper关键字

•    主函数是静态的

什么时候需要使用static修饰:

当类中的成员需要被所有对象共享时,用static修饰。不需要被共享时,就不用static修饰。

简单说:共性用static修饰,特性不用static修饰。

7:)final可以用来修饰什么呢?

(1)final可以用来修饰类:被fainl修饰的类不能被继承。

(2)final可以用来修饰成员方法:被final修饰的成员方法不能被重写。

(3)final可以用来修饰变量:被final修饰的变量为常量,值不能被修改。

       常量的命名规范:要求大写。

       final int PI = 3.14;

final难道必须声明的时候就赋值。

      一般来说,是这样的。但是特殊情况:在构造方法可以给final修饰的变量赋值。

 

五,抽象类和接口  

  

抽象类(abstract)

    (1)只抽取了很多类的方法的声明,为了保证不出问题,方法声明用abstract修饰。

    (2)抽象类的特点

           A:一个类如果有了抽象方法,那么这个类必须是抽象类。抽象类里边可以没有抽象方法。

           B:抽象类是不能够被实例化的。不能够创建对象的。

           C:如果一个类继承抽象类,那么,它要么实现抽象类中的所有抽象方法,

              要么本身也是抽象类。

    (3)抽象类的成员特点:

           A:成员变量:子类可以直接继承抽象类中的成员变量。(抽象类中的成员变量可以和以前是一样的)

           B:成员方法:抽象类中分为两种方法,一种是抽象方法,这种方法在子类中必须要被实现。

                        一种是普通的方法。可以被子类直接继承使用。

           C:构造方法:抽象类不能被实例化,那么它有构造方法吗?抽象类是class,那么它就有构造方法。

                      它的构造方法有用吗?有,为了让子类实例化的时候使用。

接口(interface)

    (1)接口的由来:当一个类中的方法都是抽象的时候,你没必要定义为抽象类,

                   定义为接口就可以了。

    (2)解决了java中只能单继承的问题。(对多继承进行了优化)

           A:类与类:只能是单继承。

           B:接口与接口:可以是单继承,也可以是多继承。

           C:类与接口:可以是单实现,也可以是多实现。

    (3)成员特点:

           A:只有成员变量和成员方法。

           B:成员变量默认修饰符 publicstatic final

                  **int x =20;

                  **其实是这样的 public static final int x = 20;

           C:成员方法默认修饰符 publicabstract

                  **voidshow();

                  **其实是这样的 public abstract void show();

           建议:自己手动加上修饰符。

    (4)接口特点:

           A:接口是对外暴露的规则

           B:接口是功能的扩展

           C:接口降低了程序的耦合性。

                  **内聚(自己实现功能的能力)

                  **高内聚,低耦合。

           举例:主板和CPU,USB接口,电源插座。

           D:扩展说了下接口的理解

                  **狭义的理解就是java中的接口。

                  **广义的理解就是:任何定义的规范都是接口。

    (5)接口和抽象类的区别:

           A:抽象类只能被单继承;接口可以被多实现。

           B:抽象类中的成员:成员变量:可以是常量,也可以是变量。

                            成员方法:可以是抽象的,也可以是非抽象的。

                            构造方法:虽然不可以创建对象,但是可以给子类实例化用。

              接口中的成员:成员变量:只能是常量。默认修饰符 public static final

                          成员方法:只能是抽象的。默认修饰符 public abstract

           C:抽象类中定义的是体系结构中的共性的内容。

              接口中定义的是对象的扩展功能。

           D:抽象类被继承表示的是:"is a"的关系。xxyy中的一种。

             接口被实现表示的是: "like a"的关系。xxyy中的一种。

 

---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima