码迷,mamicode.com
首页 > 编程语言 > 详细

java.面向对象

时间:2015-07-31 20:29:17      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

面向对象和面向过程

面向过程:先分析出解决问题的步骤,然后按照步骤一步一步实现。强调的是功能行为。

面向对象:以现实世界中客观存在的事物为中心来构造软件系统,并且在构造的过程中尽可能的运用人类的自然思维方式。分析出类和对象以及其之间的关系。将功能封装进对象,强调具备了功能的对象。

类与对象

类:对生活中事物的描述(包括概念上的事物)。

对象:类的实例。

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

1、作用范围:成员变量,作用于整个类中;局部变量,作用于函数或语句块中。

2、在内存中的位置:成员变量,在堆内存中,随着对象的存在而存在;局部变量,在栈内存中,局部块执行完,即在内存中消失。

面向对象三个基本特性:封装、继承、多态。


1.封装(Encapsulation):

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

       好处:将变化隔离,提高了安全性;提高了重用性,便于使用。

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

private,权限修饰符的一种,是类成员(成员变量,成员方法)修饰符,私有后只在本类可访问。是封装的一种体现形式。

对外提供公共访问方式的好处:可以在访问方式中添加逻辑判断等语句,对要访问的数据进行操作,提高了代码的健壮性。

构造函数

特点:1、与类名相同;2、不可定义返回值类型、不可以写return语句。作用:给对象进行初始化。

象一创建,就会调用相应的构造函数, 多个构造函数以重载的形式存在。当一个类中没有定义构造函数时,jvm会为该类自动添加一个空参数的构造函数。若定义了构造函数,就不添加默认构造函数。默认构造函数的访问权限和所属类一致。

this本类对象的引用。

this语句:用于构造函数之间进行互相调用。只能定义在构造函数的第一行。

static :用于修饰成员(成员变量和成员函数)

被修饰的成员特点:

1、随着类的加载而加载,优先于对象存在。2、被所有对象所共享。3、可以直接被类名调用。

注意:①静态方法只能访问静态成员。②静态方法中不能出现this和super关键字(这两个关键字是对象创建后才有的)。③主函数是静态的。

实例变量和类变量:

1、内存中的位置:实例变量随对象的创建而存在于堆内存中;而类变量随着类的加载而存在于方法区中。

2、生命周期:类变量随着类的消失而消亡;实例变量随着对象的消失而消失。


对象初始化过程

  1. Person p = new Person("Zhangsan"20);  
  2.   
  3. 1、类加载器找到Person.class文件并加载到内存中。  
  4.   
  5. 2、执行该类的static代码块,若有,给类进行初始化。  
  6.   
  7. 3、在堆内存中开辟空间,分配内存地址。  
  8.   
  9. 4、在堆内存中建立对象的特有属性,并进行默认初始化。  
  10.   
  11. 5、对属性进行显示初始化。  
  12.   
  13. 6、对对象进行构造代码块初始化。  
  14.   
  15. 7、对对象进行构造函数初始化。  
  16.   
  17. 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

接口的出现将“多继承”的另一种体现形式体现出来,即“多实现”。

 

接口不能创建对象,因为有抽象方法。

需要被子类实现其所有抽象方法后,子类才能实例化,否则子类也是一个抽象类。

接口可以被类多实现。

 

接口的特点:

  1. 1、接口是对外暴露的规则。  
  2.   
  3. 2、接口是程序的功能扩展。  
  4.   
  5. 3、接口可以用来多实现。  
  6.   
  7. 4、类与接口之间是实现关系,而且类在继承一个类的同时实现多个接口。  
  8.   
  9. 5、接口和接口之间可以有继承关系。  

 

5.包(package)

1、对类文件进行分类管理

2、给类提供多层命名空间

3、写在程序的第一行

4、类名的全称:包名.类名

5、包也是一种封装形式

 

包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰

不同包中的子类还可以直接访问父类中被protected权限修饰的成员。

包与包之间修饰权限只有两种:public、protected



public protected default private
同一类中 Y Y Y Y
同一包中 Y Y Y
子类 Y Y

不同包中 Y

 


版权声明:本文为博主原创文章,未经博主允许不得转载。

java.面向对象

标签:

原文地址:http://blog.csdn.net/u010928364/article/details/47173115

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!