面向对象是相对面向过程而言的,面向过程强调的是功能行为,面向对象是将功能封装进对象,强调具备了功能的对象。
[万物皆对象]
面向对象三大特征:封装、继承、多态
类和对象的关系:
类:对现实生活中事物的描述
对象:就是这类事物,实实在在存在个体
描述事物就是描述事物的属性(对应类中变量)和行为(对应类中方法),属性和行为共同 称为类的成员(成员变童和成员方法)
成员变量作用于整个类中,局部变量作用于函数中,或者语句中
成员变量在堆内存中,因为对象的存在,才在内存中存在
局部变量:存在栈内存中 封装: 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式 好处:将变化隔离、便于使用、提高重用性、提高安全性
封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问 private (私有):权限修饰符,用于修饰类中的成员(成员变里,成员函数),私有只在本类 中有效。
static用于修饰成员(成员变里和成员函数)
被儋饰的成员:随着类的加载而加载,优先于对象存在,被所有对象所共享,可以直接被类 名调用。
类名.静态成员[方法区、共享区、数据区]_--存放类中的方法和共享数据。
什么时候定义静态函数:当功能内部没有访问到非静态数据(对象的特有数据),那么该功 能可以定义成静态的,用类名直接调用。
继承:
1、提高了代码的复用性
2、让类与类之间产生了关系,有了这个关系,才有了多态的特性 注意:千万不要为了获取其他类的功能,简化代码而继承,必须是类与类之间有 所属关系才可以继承,
Java语言中,只支持单继承,不支持多继承,因为多继承容易带来安全隐患:当 多个父类(超类,基类super) 中定义了相同功能,功能的内容不同时,子类对 象不知该运行哪一-个。
但是java保留这种机制,并用多实现形式完成表示。
Java支持多层继承,也就是- -个继承体系。.
想要使用体系,先查阅体系父类的描述,因为父类中定义的是该体系中共性功能, 通过了解共性功能,就可以知道该体系的基本功能。
在具体调用时,要创建最子类的对象,- 是有可能父类不能创建对象(抽象类和 接口),二是创建子类对象可以使用更多的功能,包括基本的也包括特有的。 简单说:查阅父类功能,创建子类对象使用功能。
如果子类中出现非私有的同名成员变量,,子类要访问本类中的变量,用this, 要访问父类中的同名变量,用super, this 代表本类对象的引用,super 代表父类 对象的引用。
子父类函数的特点:
重写(覆盖) (子父类方法要- -模一 样):要与重载(只看同名函数的参数列表) 区别开来,当子类出现和父类一样 的函数时,当子类对象调用该函数,会运行子 类函数的内容,如同父类的函数被覆盖-样。
覆盖注意:子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖, 否则编译失败;静态只能覆盖静态;
子父类的构造函数: .
在对子类对象进行初始化时,父类的构造函数也会运行
那是因为子类的构造函数默认第- -行有 -条隐式的语句super (); . super ():会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第-行都是super ();
为什么子类一定要访问父类中的构造函数:
因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类
是如何对这些数据进行初始化的,所以子类在对象初始化时,要先访问一下父类
的构造函数,俄国要访问父类中指定的构造函数,可以通过手动定义super 语句
的方式来指定。
子类的所有构造函数,默认都会访问父类中空参数的构造函数
因为子类每一个构造函数内的第一行都有一 句隐式super ();
final关键字:可以修饰类、方法、变量,修饰的类不可以被继承,修饰的方法不 可以被覆盖,修饰的变量时一个常量,只能被赋值-次,内部类只能访问被final 修饰的局部变量。
抽象类的特点:抽象方法一定定义在抽象类中,抽象方法和抽象类都必须被 abstract关键字修饰,抽象类不可以用new创建对象,因为调用抽象方法没意义; 抽象类中的抽象方法要被使用,必须由子类覆写所有的抽象方法,建立子类对象 调用,如果子类只覆写了部分抽象方法,那么该子类还是一个抽象类。
抽象类和--般类没有太大的不同,只是要注意该怎样描述事物就如何描述事物, 只不过该事物中出现了一些看不懂的东西,这些不确定的功能,也是该事物的功 能,需要明确出现,但是无法定义主体。
抽象类比一般类多了抽象函数,在类中可以定义抽象方法,不可以实例化。
抽象类可以不定义抽象方法,仅仅是不让该类建立对象。
来源:CSDN
作者:slhtf
链接:https://blog.csdn.net/slhtf/article/details/104486276