面向对象总结-01-----黑马程序员

 

ASP.Net+Android+IOS开发------期待与您交流

<面向对象及总结------01>

面向对象:面向对象就是面向对象是相对于面向过程而言的,面向过程强调的是功能,面向对象强调的是将功能封装进对象。

面向对象主要分为三大特征,<封装>,<继承>,<多态>。

面向对象实现的目的

**把复杂简单化

**把程序员从执行者变成了指挥者

封装:隐藏对象的属性和方法,仅提供公共方法对外访问,有多种体现形式。

将变化隔离:将函数方法独立

方便使用:提供暴露出去的方法如电脑主机箱,这也是一种面向对象的方法

提高复用性:多次调用

提高安全性:仅仅是调用对象是不能使用的,还要使用特殊的获方法

关键字private:封装在代码中的体现

(1)私有的意思,权限修饰符

(2)用来修饰成员变量和成员函数

(3)用private修饰的成员只在本类中有效

(4)私有是封装的一种体现

继承:(1)当出现多个类时,类中有公共属性和公共的方法,就把他提取出来单独成一个类,在使用别的类继承他就可以使用它的公共方法了,这样大大的减少了代码,提高了复用性,和扩展性,继承的出现让类与类之间产生了关系,提供了多态的前提。

(2)继承的体系结构

A:多个具体的对象,不断的向上抽取共享的内容,最终形成了一个体系。这个体系叫做继承体系。

B:继承体系的学习和使用原则

**学习顶层的内容。因为他是整个体系的共性内容。

**创建子类使用。也就是使用底层的具体对象。

(3)继承的特点:

A:java中只能单继承,没有多继承。

B:java可以有多重(层)继承。

(4)继承的好处:

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

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

(5)子父类中的成员关系

A:成员变量

在子类方法中使用一个变量时:

首先,在方法的局部变量中找这个变量,有则使用。

否则,在本类中找成员变量,有则使用。

否则,在父类中找成员变量,有则使用。

否则,报错。

B:成员方法

用子类对象使用一个方法时。

首先,在子类中找这个方法,有则使用。

否则,在父类中找这个方法,有则使用。

否则,报错。

重写和重载的区别?

重载:在同一类中。方法名相同,参数列表不同。重载可以改变返回类型。

重写:在不同类中(子父类中)。

      方法声明相同(返回类型,方法名,参数列表均相同)。

重写需要注意:

**子类方法的访问权限要大于等于父类方法的访问权限。

**静态只能重写静态。但是这种情况一般不会出现。

构造方法

**子类的实例化过程

***子类创建对象时,会先去创建父类的对象。

    默认是去调用父类的无参构造方法。

***子类构造方法中,第一行默认是super()

***为什么子类中第一行会默认有super()

因为他继承父类的成员使用,使用前这些成员必须初始化,

而他们是父类的成员,所以,必须通过父类进行初始化。

所以,会先创建一个父类的对象。

**当父类没有无参构造方法时

必须使用this或者super调用其他的构造方法。

(6)this和super的区别

this:代表本类对象的引用。

super:代表父类的存储空间。

多态: 父类引用或接口指向子类对象,一个对象在程序不同运行时的多种表现形式。

  多态前提

A:存在着继承或者实现关系

B:有方法的重写

C:父类(接口)引用指向子类(实现)对象

同一个对象,在程序不同时刻的多种运行状态。举例:动物,狗是狗,狗是动物。水(气态,液态,固态)

比如吃饭,只要是生物都能吃饭,就可以使用吃饭功能,比如说猫,狗,猪,牛,他们都是动物,都有吃饭功能,如果我们想调用他们的吃饭功能时就要用,猫.eat(),狗.eat(),.......

然而他们吃的东西又不一样,这时我们就可以使用多态的特性,设定一个动物类,写一个吃饭方法,然后让子类动物都继承它,并复写他的run方法,这时我们就可以使用动物.eat().谁要吃饭就调用谁

 

多态的好处和弊端:

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

弊端:虽然可以预先使用,但是只能访问父类中已有的功能,运行的是后期子类的功能内容。

      不能预先使用子类中定义的特有功能。

 多态中对象调用成员的特点

Fu f = new Zi();

A:成员变量

编译看左边,运行看左边

B:成员方法 

编译看左边,运行看右边

C:静态方法

编译看左边,运行看左边

 多态的思想

指挥同一批对象做事情。举例:带兵打仗,下课等。

成员变量和局部变量的区别

(1)作用域

成员变量:针对整个类有效。

局部变量:只在某个范围内有效。(一般指的就是方法,语句体内)

(2)存储位置

成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中

局部变量:在方法被调用,或者语句被执行的时候存在,存储在栈内存中

  当方法调用完,或者语句结束后,就自动释放。

(3)初始值

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

局部变量:没有默认初始值,使用前必须赋值

构造方法:

在面向对象中关于对象调用构造方法的使用注意事项

(1)特点:

方法名与类名相同

没有返回类型

没有返回值

(2)作用:构造函数是用于创建对象,并对其进行初始化赋值,对象一建立就自动调用相对应的构造函数,

(3)构造方法的注意事项:

A:如果一个自定义类没有构造方法,系统会默认给出一个无参构造方法。

B:如果一个自定义类提供了构造方法,那么,系统将不再给出无参构造方法。

  这个时候,你可以不使用无参构造方法。

  如果你想使用,那么,就必须手动给出无参构造方法。

建议:一般情况下,我们的自定义类都要手动给出无参构造方法,在利用构造方法重载的特性。

(4)构造方法和成员方法的区别

A:格式区别

构造方法和类名相同,并且没有返回类型,也没有返回值。

普通成员方法可以任意起名,必须有返回类型,可以没有返回值。

B:作用区别

构造方法用于创建对象,并进行初始化值。

普通成员方法是用于完成特定功能的。

C:调用区别

构造方法是在创建对象时被调用的,一个对象建立,只调用一次相应构造函数

普通成员方法是由创建好的对象调用,可以调用多次

构造代码块:

(1)作用:给对象进行初始化,对象一建立就执行,而且优先于构造函数执行

(2)构造代码块和构造函数的区别:

构造代码块是给所有不同对象的共性进行统一初始化

构造函数是给对应的对象进行初始化

this关键字

(1)this关键字代表本类对象的一个引用,谁调用this所在的方法,this就代表谁  

(2)this的使用场景

A:用于区分同名成员变量和局部变量;

B:在定义函数时,该函数内部要用到调用该函数的对象时,因为此时对象还没建立,故this代表此对象

B:构造函数间调用

**这个时候,this(参数)必须作为第一条语句存在。

Person p = new Person();在内存中做了哪些事情。

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

(2)如果p定义在主方法中,那么,就会在栈空间开辟一个变量空间p。

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

(4)对对象中的成员进行默认初始化。

(5)对对象中的成员进行显示初始化。

(6)调用构造代码块对对象进行初始化。(如果没有就不执行)

(7)调用构造方法对对象进行初始化。对象初始化完毕。

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

匿名对象

匿名对象就是没有给对象起名字的对象。

使用:

一般在对象只调用一次的时候和只调用一次类中方法的时候使用。

可以作为实际参数在方法中传递。

实例:

Class Person{

Person(){}

public void run(){

Syso(“匿名对象调用”);

}

}

class Demo{

public static void main(String []args){

New Person();

//对象只调用一次的时候,当此对象一建立就自动运行类中的构造方法

New Person().run();

//直接使用匿名对象调用类中方法,仅限于只使用一次的时候。

}

}



 

ASP.Net+Android+IOS开发------期待与您交流

 详细请查看:http://edu.youkuaiyun.com

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值