您的位置:首页 > 编程语言 > Java开发

java.面向对象

2015-07-31 18:00 495 查看

面向对象和面向过程

面向过程:先分析出解决问题的步骤,然后按照步骤一步一步实现。强调的是功能行为。
面向对象:以现实世界中客观存在的事物为中心来构造软件系统,并且在构造的过程中尽可能的运用人类的自然思维方式。分析出类和对象以及其之间的关系。将功能封装进对象,强调具备了功能的对象。
类与对象
类:对生活中事物的描述(包括概念上的事物)。
对象:类的实例。
成员变量和局部变量的区别:
1、作用范围:成员变量,作用于整个类中;局部变量,作用于函数或语句块中。
2、在内存中的位置:成员变量,在堆内存中,随着对象的存在而存在;局部变量,在栈内存中,局部块执行完,即在内存中消失。
面向对象三个基本特性:封装、继承、多态。


1.封装(Encapsulation):
是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
好处:将变化隔离,提高了安全性;提高了重用性,便于使用。
原则:不需要对外提供的内容都隐藏起来。
private,权限修饰符的一种,是类成员(成员变量,成员方法)修饰符,私有后只在本类可访问。是封装的一种体现形式。
对外提供公共访问方式的好处:可以在访问方式中添加逻辑判断等语句,对要访问的数据进行操作,提高了代码的健壮性。
构造函数
特点:1、与类名相同;2、不可定义返回值类型、不可以写return语句。作用:给对象进行初始化。
对象一创建,就会调用相应的构造函数, 多个构造函数以重载的形式存在。当一个类中没有定义构造函数时,jvm会为该类自动添加一个空参数的构造函数。若定义了构造函数,就不添加默认构造函数。默认构造函数的访问权限和所属类一致。
this:本类对象的引用。
this语句:用于构造函数之间进行互相调用。只能定义在构造函数的第一行。
static :用于修饰成员(成员变量和成员函数)
被修饰的成员特点:
1、随着类的加载而加载,优先于对象存在。2、被所有对象所共享。3、可以直接被类名调用。
注意:①静态方法只能访问静态成员。②静态方法中不能出现this和super关键字(这两个关键字是对象创建后才有的)。③主函数是静态的。
实例变量和类变量:
1、内存中的位置:实例变量随对象的创建而存在于堆内存中;而类变量随着类的加载而存在于方法区中。
2、生命周期:类变量随着类的消失而消亡;实例变量随着对象的消失而消失。

对象初始化过程

[java] view
plaincopy

Person p = new Person("Zhangsan", 20);



1、类加载器找到Person.class文件并加载到内存中。



2、执行该类的static代码块,若有,给类进行初始化。



3、在堆内存中开辟空间,分配内存地址。



4、在堆内存中建立对象的特有属性,并进行默认初始化。



5、对属性进行显示初始化。



6、对对象进行构造代码块初始化。



7、对对象进行构造函数初始化。



8、将内存地址赋值给栈内存中的p变量。

2.继承

特点:1、提高了代码的重用性。 2、让类与类产生了关系,是多态的前提。
继承的类与类之间必须有所属关系。A is B

java只支持单继承
避免了多继承带来的安全隐患:当多个父类定义了相同的功能时,功能内容不同时,子类对象不确定要运行哪一个。java保留了这种机制,用多实现来完成。
javaAPI使用原则
查阅父类功能,创建子类对象使用功能。
原因:1、父类定义的是该体系中的共性的功能 2、父类有可能不能创建对象 3、创建子类对象可以使用更多的功能。(包括特有的和共性的)
super:父类对象的引用。
super关键字的使用方式同this。
final关键字
1、可以修饰类、函数、变量。
2、被final修饰的类不能被继承。
3、被final修饰的函数不能被重写。
4、被final修饰的变量是一个常量,只能被赋值一次,既可以修饰成员变量,也可以修饰局部变量。
5、内部类定义在类中的局部位置上时,只能访问被final修饰的局部变量。

抽象类:
多个类中出现相同功能,内容不同。这时可以进行向上抽取,只抽取功能定义,不抽取功能主体。
1、抽象方法一定在抽象类中。
2、抽象的方法和类必须被abstract修饰。
3、抽象类不可以用new创建对象。因为调用抽象方法没有意义。
4、抽象方法必须被子类重写后,才能由子类对象调用。如果子类只覆盖了部分抽象方法,那该子类还是抽象类。
特殊:抽象类中可以不定义抽象方法,这样做只是不希望其被创建对象。
抽象类和一般类的不同之处:1、抽象类可以有抽象方法。2、抽象类不能创建对象。


子类实例化过程:
子类在调用构造方法进行初始化时,会先调用其父类的构造函数。默认情况下,子类所有的构造函数的第一句隐藏着一条super()语句来访问父类的无参构造函数。
可以手动定义super()来指定要访问的父类构造函数。super()语句也是放在构造函数的第一行。
父类中的数据,子类可以直接获取,所以子类在创建对象时,需要先查看父类如何对这些数据初始化的,可避免相同数据的重复定义。
子类中至少有一个构造函数会访问父类的构造函数。(有其子,必先有其父)


3.多态

某一类事物的多种存在形态。
多态的体现:父类引用指向子类对象。(向上转型)
多态的前提:必须是类与类之间有关系。继承或实现。
多态的好处:提高了程序的扩展性。

转型:强转称为向下转型。
多态自始至终都是子类对象在做着变化。

非静态成员函数的特点:编译看左边,运行看右边。(动态绑定)
非静态成员变量的特点:编译、运行时期都看左边。
静态成员函数和静态成员变量的特点:编译、运行时期都看左边。(静态绑定)

4.接口:(interface)
接口中的成员修饰符都是固定的。
成员常量:public abstract final
成员方法:public abstract
接口的出现将“多继承”的另一种体现形式体现出来,即“多实现”。

接口不能创建对象,因为有抽象方法。
需要被子类实现其所有抽象方法后,子类才能实例化,否则子类也是一个抽象类。
接口可以被类多实现。

接口的特点:

[java] view
plaincopy

1、接口是对外暴露的规则。



2、接口是程序的功能扩展。



3、接口可以用来多实现。



4、类与接口之间是实现关系,而且类在继承一个类的同时实现多个接口。



5、接口和接口之间可以有继承关系。


5.包(package)
1、对类文件进行分类管理
2、给类提供多层命名空间
3、写在程序的第一行
4、类名的全称:包名.类名
5、包也是一种封装形式

包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰
不同包中的子类还可以直接访问父类中被protected权限修饰的成员。
包与包之间修饰权限只有两种:public、protected
publicprotecteddefaultprivate
同一类中YYYY
同一包中YYY
子类YY
不同包中Y
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: