本节关键词:类,对象,面向对象
面向对象
将客观世界中的事物描述为对象,通过抽象思维方法将需要解决的实际问题分解成人们易于理解的对象模型,然后通过对象模型构建应用程序的功能。(针对用户提出的要求进行分析,并将分析的结果拼接成完整的个体,然后在把这个个体分块完成,最后把所有完成的小个体整合在一起。)人是怎么想的,让计算机按照人的想法去实现。
类
具有相同属性和行为的一类事物。类实际是表示一个客观世界某类群体的一些基本特征抽象。属性:说明是什么,是静态的,一个个具体的信息,实际上,一个属性就是一个变量。行为:说明干什么,是动态的。
对象
一个个具体的东西,类中的一个具体/抽象。
类和对象的关系
类是对象的模板,对象是类的实例。
构造方法
方法名与类名相同
没有返回值,甚至连void都没有
在创建对象时由JVM自动调用
作用是:类成员变量的初始化。
类的定义
之前说过,有2种方式,现在来回顾一下,分别是public class +类名 和class +类名。记住:类名的每一个单词的首字母要大写(驼峰式命名规则)。
类的使用
通过对象来使用的。
对象的创建和使用(2种创建),对象再使用前,必须实例化。
方法1
类名 对象名称=null; //声明对象
对象名称=new类名(); //实例化对象
方法2
类名 对象名称=new类名();
两种创建方法与数组的创建是类似的,其含义也是如此,new 是用来在内存中开辟一块空间的,在声明之后,得找个地方存放,不是吗?有需要的话,我们可以创建多个对象,要求对象名不同。
当要访问对象中的属性或方法时:
对象名.属性名;
对象名.方法名();
当在主函数中给属性赋值时,可以:
对象名.属性=“y”;
其中等号右边所赋的值与数据类型有关,当为字符串类型时,就是上边这种情况。当是int类型的时候:对象名.属性=10;
面向对象的特征:封装,继承,多态
封装:
两个方面—>1、把对象的属性和行为看做是一个整体,把它们紧紧的绑定在一起,放到对象中。-->2、把不需要外界知道的信息隐藏起来。隐藏属性、方法或方法实现细节的过程(私有属性,公有方法)。
成员变量(全局的):类中,方法以外的变量。
局部变量:方法内部声明的变量。
成员变量和局部变量区别:
注意事项:在同一个类中局部变量与成员变量的名称可同名,在使用时局部变量的优先级高(就近原则),在同一个方法中不允许由同名的局部变量,在不同的方法中可以有同名的局部变量。
| ||
| 成员变量(全局变量) | 局部变量 |
在类中的位置 | 类中方法外 | 方法内或方法声明上 |
内存中的位置 | 堆内存 | 栈内存 |
声明周期 | 随着对象出现和消失 | 随着方法的调用出现和消失 |
初始化值不同 | 有默认的初始化值 | 没有默认,必须先赋值再用 |
访问控制修饰符
| 本类中 | 同包不同类 | 不同包子类 | 所有地方 |
Private (私有) | √ |
|
|
|
Friendly (默认) | √ | √ |
|
|
Protected (受保护) | √ | √ | √ |
|
Public (公共的) | √ | √ | √ | √ |
Static:静态的。
static可以修饰成员变量,也可以修饰成员方法:随着类的加载而加载,优先于对象存在,被类的所有对象共享。
This----->自己的,本类的。
Super和this
序号 | 区别点 | this | super |
1 | 属性访问 | 访问本类中的属性,如果本类中没有此属性,则从父类中查找。 | 直接访问父类属性 |
2 | 方法 | 访问本类中的方法,如果本类中没有此方法则从父类中继续查找。 | 直接访问父类中的方法 |
3 | 调用构造 | 调用本类构造,必须放在构造方法的首行。 | 调用父类构造,必须放在子类构造方法的首行。 |
4 | 特殊 | 表示当前对象 | 无此概念 |
SUN公司建议:封装时,需要至少加一个无参、一个包含所有参数的构造器。(两个构造)
有参构造方法:用于实例化对象的同时给与对象的成员变量赋予用户给与的值。
注意:当一个类中显示的定义了有参构造方法时,其默认隐形构造方法将消失,如需使用无参构造方法时,则必须显示定义无参构造方法。
方法重载:在同一个类中,方法名相同,参数列表不同(参数的个数,类型,顺序)overload。
重载的作用,提高程序的灵活度。
继承:在一个类的基础上产生一个新类的过程,叫继承
Extends(2个写法)
1,先写父类,再写子类
2,先写子类,抽取相同的部分作为父类,被子类继承
优点:提高代码效率,避免代码重复
特点:(5大点)
* 1,子类继承父类非私有的属性和方法
* 2,子类也可以扩展自己的属性和方法
* 3,子类无法继承父类的构造器,只能通过super调用
* 4,子类可以重写父类的方法
* 5,可以声明父类,创建子类(父类能出现的地方,子类一定可以出现)-->3小点
* 1,声明什么类型,就只能调用本类型的属性和方法
* 2,创建什么类型,运行什么类型的属性和方法
* 3,创建什么类型,就可以强转为什么类型
重写:在继承中,方法签名相同(方法名+参数列表),扩展:方法重写时注意:方法名相同,参数列表相同,返回值类型相同,子类的访问修饰符大于等于父类的访问修饰符。
这里注意一点:final,在修饰一个类的时候,这个类就没有子类,修饰属性时,就表示这是一个常量,不可更改,修饰方法时,就是说,这个方法是不能被重写的。
子类对象再实例化前会先默认调研父类中的构造方法,所以在对子类实例化前,要对父类的属性进行初始化。
多态: 多态就是一种事物,多种形态。它的直接表现就是 重载和重写。
对重载 和重写的进一步比较:
方法的重载与重写的区别 | |||
序号 | 区别点 | 重载 | 重写 |
1 | 单词 | Overloading | Overriding |
2 | 定义 | 方法名称相同,参数的类型,或个数,或顺序不同。 | 方法名称,参数类型,返回值类型全部相同,只有方法体不同。 |
3 | 对权限没有要求 | 被重写的方法不能拥有更严格的权限 | |
4 |
| 发生在一个类中 | 发生在继承类中。 |