面向对象概述
面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。早期的计算机编程是基于面向过程的方法,例如实现算术运算1+1+2 = 4,通过设计一个算法就可以解决当时的问题。随着计算机技术的不断提高,计算机被用于解决越来越复杂的问题。通过面向对象的方式,将现实世界的物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。同时,面向对象能有效提高编程的效率,通过封装技术,消息机制可以像搭积木的一样快速开发出一个全新的系统。面向对象是指一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的集合。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
首先根据客户需求抽象出业务对象;然后对需求进行合理分层,构建相对独立的业务模块;之后设计业务逻辑,利用多态、继承、封装、抽象的编程思想,实现业务需求;最后通过整合各模块,达到高内聚、低耦合的效果,从而满足客户要求。
面向对象的概念具体要求的确定,各自有各自的理解。
面向对象类与对象
类是对现实事物的抽象,对象是类的一个实例
例如,现在定义了一个Person类,它描述的是人这一类事物,里面有各种各样的属性如:name,age等等
而对象Person p = new Person();就创建了一个这类事物中的一个实例,把抽象的属性具体化了
成员变量和局部变量
成员变量作用整个类,存在于堆内存中。而局部变量作用域较小,如在某个成员函数中定义的变量,存在于栈内存中。
匿名对象
如果对对象的方法只调用一次时,为了简化可以使用匿名对象,如:new Person().getname();如果对对象的成员函数有多次调用的话必须给对象起一个名字。
可以将匿名对象当作实际参数进行使用,如:public void test(Person p){} 当对这个函数进行调用时可以这样写test(new Person)
封装
是指隐藏对象的属性和实现细节,只队外提供公共访问方式。
静态关键字static
静态修饰的有成员变量和成员函数。当对象中出现共享数据时,(如,定义student时的school属性)该数据要被静态修饰,当对象中出现特有数据时要定义成非静态。(如,定义student时的name)。
静态函数:只要函数没有访问内部的非静态变量,那么就可以定义为静态的。如果函数要用到类内部的变量,那么这个变量也必须是静态的。
静态的特点:可以不建立对象直接用类名来调用类中的静态成员变量和成员函数。
继承
关键字extends,继承中的父类是对这一类事物的共性抽取,子类是对事物的扩展,例如定义一个父类Person里面包含有基本属性name,age;但如果细分的话有student,有worker。他们需要继承父类的所有人都都有的东西,还要添加进自己的属性。
final关键字
可以修饰类,变量,和方法。final修饰的类不能被继承,final修饰的方法不能被覆盖,final修饰的变量是一个常量,只能被赋值一次。内部类只能访问被final修饰的局部变量。
抽象类abstract
可以修饰类与方法,被修饰的方法即为抽象方法,抽象方法没有函数体,用分号结束,如:abstract void person();
抽象方法必须放在抽象类内,抽象类内可以定义非抽象方法,而且抽象类的子类必须复写父类中的抽象方法。
抽象类不能用new创建对象,但可以建立对象的引用
接口interface{}
当一个抽象类中的方法都是抽象方法时,那么可以把这个类定义为接口。
接口中的成员都是public修饰的,因为接口成员有固定的修饰符,所以可以省略不写
接口可以被类实现,关键字为implements,java中只允许单继承但可以多实现,即可以实现多个接口。
接口中的方法也必须被子类复写才能创建子类对象
内部类
将一个类定义在另一个类里面,里面这个类就叫做内部类。
内部类可以访问外部类的成员,包括私有成员,而外部类想要访问内部类的成员必须要建立内部类的对象。内部类可以被private修饰
内部类在主函数中创建对象的格式 外部类 . 内部类 对象名 = new 外部类构造方法 . new 内部类构造方法
静态内部类:当内部类定义为静态后,只能访问外部类中的静态成员。当内部类内定义了静态成员,该类必须的静态的
匿名内部类:定义匿名内部类必须继承一个类或者实现接口,如果person是一个抽象类,可以用下面的方法创建匿名内部类
new Person()
{
复写方法
}
提示:new Person(){}后面跟大括号相当于建立了一个person的子类对象
封装
封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:
将变化隔离。
便于使用。
提高重用性。
提高安全性。
封装原则:
将不需要对外提供的内容都隐藏起来。
把属性都隐藏,提供公共方式对其访问。
关键字private:
私有,权限修饰符:用于修饰类中的成员。私有只在本类中有效。
构造函数
特点:
函数名与类名相同
不用定义返回值类型
不可以写return语句
作用:
给对象进行初始化,对象一建立就会调用与之对应的构造函数。
小细节:
当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函 数
构造代码块:
给对象进行初始化
对象一建立就运行,而且优先于构造函数执行
和构造函数的区别:
构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。
注意:
构造函数是可以被私有化的,私有化后,此类无法创建对象。
关键字this:
This代表它所在函数所属对象的引用,简单说就是那个对象在调用this所在函数, this 就代表那个对象。
主函数:
主函数的定义:public static void main(String[] args){}
主函数是一个特殊的函数,作为程序的入口,可以被jvm调用。
主函数的定义:
Public:代表着该函数的访问权限是最大的
Static:代表着主函数虽累得加载就已经存在了
Void:主函数没有具体的返回指
Main:不是关键字,但是是一个特殊的单词,可以被jvm识别
函数的参数(String[] args):参数类型是一个数组,该数组中的元素是字符串。
注意:主函数的格式是固定的,只有参数名可以修改。
静态的使用:
什么时候用静态变量:
当对象中出现共享数据时,该数据要被静态所修饰。对象中的特有数据要定义成非 静态存在于堆内存中
什么时候用静态函数:
当功能内部没有访问到非静态数据时,该功能可以被定义成静态的。
将方法定义成静态后,可以直接用类名对其惊醒调用。
多态:
定义:某一类事物的多种存在形态。例如:人有男女之分
多态的体现:
父类的引用指向了自己的子类对象。父类的引用也可以接受自己的子类对象
多态的好处:
多态的出现大大提高了程序的扩展性。
多态的前提:
必须是类与类之间有关系,要么继承,要么实现。
多态的弊端:
虽然多态提高了扩展性,但是只能使用父类的引用访问父类中的成员。
多态转型:
千万不要将父类对象强转成子类类型。我们能转换的是父类引用指向了自己的子类 对象时,该引用可以被提升,也可以被强制转换。
多态自始至终都是子类在做着变化。
多态中成员函数的特点:
在编译时期:参阅引用类型变量所属的类中是否有调用的方法。如果有,变异通过, 否则,编译失败
在运行时期:参阅对象所属的类中是否有调用的方法 |