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
public | protected | default | private | |
---|---|---|---|---|
同一类中 | Y | Y | Y | Y |
同一包中 | Y | Y | Y | |
子类 | Y | Y | ||
不同包中 | Y |
相关文章推荐
- java 文件读取大全
- JAVA生成RSA非对称型加密的公钥和私钥(利用JAVA API)
- Java程序设计之合租房synchronized(二)
- JAVA_RSA密钥生成
- java缓存(3、Oscache和Ehcache)
- java+搜索引擎
- spring mvc @Autowired
- struts2 基于xml 配置文件的输入验证
- spring使用aop时需要设置proxy-target-class="true" 否则无法依赖注入
- 关于Override在JDK1.5和JDK1.6上子类实现接口中方法使用@Override注解编译错误.
- springMVC --配置详细与注解说明
- 【SSH快速进阶】——struts2的模型驱动—ModelDriven
- java中二叉树的创建以及几个常用的函数
- Java CAS理解
- java正则掉坑实录
- java通过Ip地址获取地理位置
- Java中声明常量为什么用static修饰
- Flex数字类型和Java数字类型的比较
- Java读取excel指定sheet中的各行数据,存入二维数组,包括首行,并打印
- MyEclipse10 离线图文安装SVN插件教程