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

黑马程序员_面向对象(1)

2015-08-18 09:13 316 查看
                                             -------
android培训java培训、期待与您交流!
----------

      

1.什么是面向对象:

把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,

形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系

,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。

面向开发时应该注意什么:以后的开发其实本质就是找对象使用,没有对象就会创建对象。

开发:找对象,建立对象,使用对象,维护对象的关系。

面向对象的三个特征:封装,继承,多态。

2.类和对象的关系。

  类就是对现实生活中的事物的描述,对象就是这类事物实实在在存在的个体。

属性对应类中的变量,行为对应类中的函数。

其实定义类就是在描述事物,就是在定义属性和行为,属性和行为共同成为类中的成员变量和成员方法。

3.匿名对象是对象的简化形式

使用于以下两种情况:

 1.当对对象方法仅进行一次调用的时候。

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

new Car().num=5;//匿名对象的使用方式。

让对象变成垃圾的方法:将引用变量直接指向null。

  (1)面向对象特征之一:封装

 封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

封装的好处好处:

   将变化隔离

   便于使用

   提高重用性

   提高安全性

封装的原则:

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

  把属性隐藏,提供公共方法对其进行访问

另外函数就是最小的封装体。

私有化是封装一种表现形式。通过将属性私有化外界访问不到,其实4种访问权限就是实现了封装。记住传入年龄的例子:

将person的age属性private化,然后提供改变年龄的方法,方法中可以判断传入的参数是否合法。比如说如果传入负数,则会打印一条提示语句而并不会将该年龄的属性进行改变,这就是封装的好处。

成员变量在堆内存当中有默认值不用初始化就可以参与运算,而局部变量必须初始化。

构造函数: 

 对象一建立就会调用与之对应的构造函数,构造函数的作用,可以用于给对象进行初始化。

 当一个类中没有定义构造函数时,那么系统会默认的给类加入一个空参数的构造函数。

 当在类中自定义了构造函数后,默认的构造函数就没有了。

构造函数在对象一建立就会自动调用,而一般方法是对象调用才会执行,是给对象添加对象具备的功能

 一个对象建立,构造函数只运行一次。而一般方法可以被该对象调用多次。

 构造函数可以调用本类中其他的非静态方法。

构造代码块:

 给对象进行初始化,对象一建立就运行,而且优先于构造函数执行,是给所有对象进行统一初始化,而构造函数是给对应的对象进行初始化。

this关键字:

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

 this()语句用于构造函数之间的进行互相调用。this语句只能定义在构造函数的第一行,因为初始化要先执行。()可以传入参数。假如构造函数A调用了构造函数B那么B会先初始化,完事儿之后A再进行初始化。

 一个类中成员之间的互相调用都是对象完成的。

静态(看笔记本)

虚拟机在编译自己的类时如果要使用某个类时,会先在classpath指定目录下面找有没有该类编译后生成的.class文件如果没有,就会根据当前目录下面去找有没有相应的.class文件。没有再看有没有该类的java文件,有就会编译生成该类的.class文件再编译自己。只要有该类的class文件就能编译自己(可以没有该类源文件)所以如果我们要使用别人开发的工具类,只需要加载该类的class文件就行。

静态代码块

单例设计模式:

(1)方式一的重要代码:

class Single{
private static final Single s=new Single();
private Single(){}
public static Single getInstance(){
return s;
}
}

 

(2)方式二重要代码:

class Single{
private static Single s=null;
private Single(){}
public static  Single getInstance(){
if(s==null){//这样的好处是减少同步的判断,当三个线程进来时就不用判断同步了。
synchronized(Single.class){
if(s==null)
s=new Single();

}
}
return s;
}
}


区别:方法1类一进内存就创建了该类的对象,而方法2只有在方法被调用时才会创建对象。也就是说对象创建的时间不同。

特点1:继承

1.提高代码的复用性。

2.让类与类之间产生关系,有了这个关系,才有了多态的特性。

重写与重载

1.重载发生在一个类中,而且重载是名字相同参数列表不同。

2.重写是发生在两个具有继承关系的类中,而且一般是子类重写父类中的方法。重写是方法名字参数都相同返回类型也要相同,访问权限不能缩小父类的权限,而且静态只能覆盖为静态,非静态只能覆盖为非静态。

因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的。所以子类在对象初始化时,要先访问下父类中的构造函数。

如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。注意:super语句一定定义在子类构造函数的第一行。形式如下

 super(可带参数)带参数是根据父类中的相应带参数的构造函数来定。

子类中至少有一个函数会访问父类中的构造函数。

一个类中不允许出现同名同参但返回类型不同的方法。(这个规则也适用于从父类中继承过来的方法)

子类的所有构造函数,默认都会访问父类中空参数的构造函数,因为子类每一个构造函数内的第一行都有一句隐式的super();语句。

当父类中没有空参数的构造函数时,子类必须手动通过super语句的形式来指定要访问父类中的构造函数。

当然,子类的构造函数第一行也可以手动的指定this语句来访问本类中的构造函数。

final关键字

  (1)被final修饰的类不能被继承

  (2)被final修饰的方法不能被覆盖

  (3)被final修饰的变量只能被赋值一次 

abstract关键字

  该关键字用于修饰类以及方法

  (1)被该关键字修饰的类是一个抽象类,不能创建对象

  (2)被该关键字修饰的方法为抽象方法,方法体为空。

  (3)含有抽象方法的类必须声明为抽象类

  (4)抽象类中可以没有抽象方法

 

模板方法模式

在定义功能时,功能一部分是确定的,另外一部分是不确定的,而确定的部分在使用不确定的部分,那么这时候就将不确定的部分暴露出去,由该类的子类去完成。就是将不确定的该暴露出去的部分封装成一个方法去让子类复写并且还可以将该方法抽象修饰。

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