您的位置:首页 > 职场人生

黑马程序员_java面向对象总结【1】(面向对象概述)

2013-12-20 16:23 309 查看
--------------android培训java培训、期待与您交流!
--------------

面向对象概述(理解面向对象,面向对象的特点,面向对象的特征,面向对象举例,面向对象开发和设计)

面向对象【类】(类与对象的关系,匿名对象的应用,成员变量和成员函数,局部变量,this、static关键字)

面向对象【类的构造】(构造函数,构造代码块)

一、面向对象概述

1、理解面向对象

(1)面向对象是相对面向过程而言的。
(2)面向对象和面向过程都是一种思想。
(3)面向过程强调的是功能行为;面向对象将功能封装进对象,强调具备了功能的对象。
(4)面向对象是基于面向过程的。

(5)万物皆对象。

例:针对冰箱的打开、存储和关闭
面向过程强调动作:打开冰箱、存储进冰箱、关闭冰箱
面向对象强调对象:冰箱.打开、冰箱.存储、冰箱.关闭(一个对象之中所含有的功能)

2、面向对象的特点

(1)是一种符合人们思考习惯的思想
(2)可以将复杂的事情简单化
(3)将程序员从执行者转换成了指挥者
(4)完成需求时:
先要去找具有所需的功能的对象来用。
如果该对象不存在,那么创建一个具有所需功能的对象。
这样简化开发并提高复用。

3、面向对象的特征

(1)封装(encapsulation)

将对象的属性和行为进行封装,其载体为类,类中的东西不需要被使用的人知道,也就是对用户隐藏内部细节,只需要对外提供使用就可以,这就是封装的思想。

封装原则:

将不需要对外提供的内容都隐藏起来。

把属性都隐藏,对外提供访问方法。

例子:电脑主机。其内部的硬件细节不需要被用户知道,只向外提供借口的使用方法,也就是说电脑主机内部对用户是透明的,用户直接可以拿来用。

函数就是Java语言中最小的封装体。

封装的好处:提高安全性、提高重用性、将变化隔离、便于使用

private:私有权限修饰符,用于修饰类中成员;私有内容只在本类中有效。

注意:私有仅仅是封装的一种表现形式。

(2)继承(inheritance)

类与类之间有关系,如鸽子和鸟,类之间的这种关系叫做关联。当处理一个问题时,可以将一些有用的类保留下来,在遇到同样问题时复用。若实现一个信鸽的功能,信鸽是鸽子,鸽子属于鸟,我们可以添加信鸽特有的属性和行为,由于鸽子保留了鸟的属性和行为,这样我们就可以把鸟类拿来复用,让信鸽继承鸟,这就节省了大量的代码量,同时这也是继承的基本思想。

(3)多态(polymorphism)
多态首先是建立在继承的基础上的,先有继承才有多态。
多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,父类的一个方法在继承的子类中表现出不同的形式。
例:
有两款手机,一款能上网,另一款能防水,这两款手机就是手机这个父类的多态,都是手机,但有不同的表现形式。

4、面向对象举例

(1)去买电脑,我不了解买电脑的具体方法,而毕老师会,则我把毕老师作为对象,调用他的买电脑的方法,即可实现买电脑,这便是一个面向对象的例子。

public class buypc {

public static void main(String[] args) {
//建立毕老师的对象,并调用对象的方法
bilaoshi b=new bilaoshi();
b.chaxun();
b.zixun();
b.kanjia();
System.out.println("付钱,购买电脑成功!");
}

}
class bilaoshi{
void chaxun(){
System.out.println("毕老师查询电脑资料");
}
void zixun(){
System.out.println("毕老师咨询电脑情况");
}
void kanjia(){
System.out.println("毕老师与商家砍价");
}
}


(2)去饭店吃饭,顾客不需要了解其中的饭的做法,只需要调用对象的功能实现即可。

public class eat {

public static void main(String[] args) {
hotel h=new hotel();
h.eat();
}

}
class hotel{
void eat(){
System.out.println("顾客到达饭店,叫服务员点菜");
waiter w=new waiter();
w.order();
}
}
class waiter{
void order(){
System.out.println("服务员写菜单,将菜单递给厨师");
cooker c=new cooker();
c.cook();
}
void take(){
System.out.println("服务员将菜端上桌,顾客开始吃饭");
}
}
class cooker{
void cook(){
System.out.println("厨师收到菜单,开始做饭");
waiter w=new waiter();
w.take();
}
}


5、面向对象开发和设计

开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。

设计的过程:其实就是在管理和维护对象之间的关系。

二、面向对象(类)

1、类与对象的关系

(1)类是同一类事物的统称,将现实世界中的一个事物抽象为对象,类就是这类对象的统称。

例如:人类、植物类、鸟类。

(2)对象就是符合某个类的定义所产生出来的实例,可以说类是事物的抽象称呼,而对象则是事物的对应实体。

例如:人类是人这个事物的抽象称呼,张三这个对象则是人这个事物的对应实体。

(3)类中对象的行为是以方法的形式定义的,对象的属性是以成员变量的形式定义的,而类包括对象的属性和方法,即类是封装对象的属性和行为的载体。

(4)java中,用来描述事物的就是类(class),对象则是类在堆内存中用new关键字建立的实体。

这里汽车图纸可以看作是类,汽车则是汽车图纸这个类在堆内存里建造的实体。



public class CarDemo{

public static void main(String[] args) {
Car c=new Car();//对象c就是CarDemo类在堆内存中建立的实体。
c.run();
}

}
class Car{
String color="黑色";
int num=4;
void run(){
System.out.println(color+"汽车..."+num+"个轮胎行驶");
}
}


2、匿名对象的应用

(1)匿名对象是对象的简化形式

(2)匿名对象两种使用情况

当对对象方法仅进行一次调用的时

匿名对象可以作为实际参数进行传递

(3)若对一个对象进行多个成员调用,则这个对象不能为匿名对象,必须要有名字。

public class CarDemo {

public static void main(String[] args) {
Car c=new Car();
//非匿名对象可以多次调用。
c.setColor("银色");
c.setNum(6);
c.run();
new Car().run();//当对象仅一次调用可以用匿名对象
}

}
class Car{
String color="黑色";
int num=4;
void run(){
System.out.println(color+"汽车..."+num+"个轮胎行驶");
}
void setColor(String color){
this.color=color;
}
void setNum(int num){
this.num=num;
}
}


3、成员变量和成员函数

事物属性对应类中变量,事物行为对应类中函数,事物的属性和行为共同成为类的成员变量和成员函数

(1)成员变量是对象的属性。

成员变量定义在类中,在整个类中都可以被访问。

成员变量随着对象的建立而建立,存在于对象所在的堆内存中。

成员变量有默认初始化值。

(2)成员函数是对象的行为。

成员函数可以有参数,这个参数可以是对象,也可以是基本数据类型的变量。

成员函数可以有返回值也可以没有,返回值可以是计算结果也可以使其他想要的数值和对象。

在成员函数中可以调用其他成员函数和类成员变量。

4、局部变量

(1)局部变量只定义在局部范围内,如:函数内,语句内等。

(2)局部变量存在于栈内存中。

(3)作用的范围结束,变量空间会自动释放。

(4)局部变量没有默认初始化值。

5、this关键字

this关键字

表面this看上去是用于区分成员变量和局部变量的同名情况。

特点:this代表其所在函数所属对象的引用。即this代表本类对象的引用。简单说,哪个对象在调用this所在的函数,this就代表哪个对象。

this应用:

什么时候使用this关键字呢?

当函数内需要用到调用该函数的对象时,就用this来表示这个对象。即但凡本类功能内部使用到了本类对象,就都用this表示。

需求:汽车类的构造函数中运用this来赋值。

class Car{
private String color="黑色";
private String name="奔驰";
private int num=4;
Car(){
//System.out.println("汽车名:"+name+" 汽车颜色:"+color+" 汽车轮胎数:"+num);
}
Car(int num){
this.num=num;//左边this.num中的num是类的成员变量,this代表该类对象的引用,右边num是该函数的局部变量。
System.out.println("汽车名:"+name+" 汽车颜色:"+color+" 汽车轮胎数:"+num);
}
Car(String name,String color){
this.name=name;
this.color=color;
System.out.println("汽车名:"+name+" 汽车颜色:"+color+" 汽车轮胎数:"+num);
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setColor(String color){
this.color=color;
}
public String getColor(){
return color;
}
public void setNum(int num){
this.num=num;
}
public int getNum(){
return num;
}
public void run(){
System.out.println("汽车名:"+name+" 汽车颜色:"+color+" 汽车轮胎数:"+num);
}

public static void main(String[] args) {
Car a=new Car();
Car b=new Car(6);
Car c=new Car("宝马", "银色");
c.setName("雪弗莱");
c.setColor("红色");
c.run();
}

}


this语句:用于构造函数间互相调用。this();

this语句只能定义在构造函数的第一行。因为初始化要先执行。

class Person{
private String name;
private int age;
Person(String name){
this.name = name;
}

Person(String name,int age){
this(name);//this语句调用了Person(name)构造函数
this.age = age;
}
}
class PersonDemo{
public static void main(String[] arge){
Person p = new Person("wangwu",20);
}
}


三、面向对象(类的构造)

1、构造函数

什么时候定义构造函数?

当分析事物时,该事物一存在就具备一些特性或行为,则将这些内容定义在构造函数中。

构造函数的时候如果需要有未知内容参与运算,那么就定义参数,否则不定义参数。

特点:

(1)函数名与类名相同

(2)不用定义返回值类型

(3)不可以写return语句

作用:给对象进行初始化。

注意:

(1).默认构造函数的特点。当类中没有定义构造函数时,系统会给其定义一个空参数的构造函数。当自己定义了构造函数后,系统的默认构造函数就没有了。

(2)多个构造函数是以重载的形式存在的。

(3)构造函数是对象一建立就运行,给对象初始化;而一般函数是对象调用才执行,给对象添加对象所具备的功能。一个对象建立,构造函数只运行一次,而一般函数可以多次调用。

2、构造代码块

作用:给对象进行初始化。

对象一建立就运行,而且优先于构造函数执行。

和构造函数区别:

构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。

构造代码块中定义的是不同对象共性的初始化内容。

3、构造函数和构造代码块示例

class Car{
private String color="黑色";
private String name="奔驰";
private int num=4;
//构造代码块,定义的是不同对象共性的初始化内容。
{
System.out.println("生产汽车");
}
//构造函数
Car(int num){
this.num=num;
System.out.println("汽车名:"+name+" 汽车颜色:"+color+" 汽车轮胎数:"+num);
}
Car(String name,String color){
this.name=name;
this.color=color;
System.out.println("汽车名:"+name+" 汽车颜色:"+color+" 汽车轮胎数:"+num);
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setColor(String color){
this.color=color;
}
public String getColor(){
return color;
}
public void setNum(int num){
this.num=num;
}
public int getNum(){
return num;
}
public void run(){
System.out.println("汽车名:"+name+" 汽车颜色:"+color+" 汽车轮胎数:"+num);
}

public static void main(String[] args) {
Car a=new Car(6);
Car b=new Car("宝马", "银色");
b.setName("雪弗莱");
b.setColor("红色");
b.run();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: