4面向对象(OOP)
-
学习线路
初学: 熟悉语法 进阶: 1、23种设计模式 2、6中开发原则 高级: 1、优化 2、架构 3、安全
概念
类:一类具有相同特性的事物的抽象描述,用一个java类表示。
成员变量:抽取的属性。
方法:抽取的行为。
对象:是类的实体。(object/instance)
类与对象
1、如何声明一个类
[public 等修饰符] class 类名称{
类成员列表;
}
2、创建对象
类名称 对象名 = new 类名称();
3、属性:位置在类中,方法外
为属性赋值:对象.属性 = 值;
(1)属性有默认值
和数组的元素的默认值是一样的:
byte,short,int,long:0
float,double:0.0
char:\u0000
boolean:false
引用数据类型:null
- 权限修饰符(*****)
修饰符 | 本类 | 本包 | 子类 | 任何地方 | 可修饰 |
---|---|---|---|---|---|
private | ✔ | ✘ | ✘ | ✘ | 属性、方法、内部类、构造器 |
default | ✔ | ✔ | ✘ | ✘ | 属性、方法、内部类、构造器、外部类 |
protected | ✔ | ✔ | ✔ | ✘ | 属性、方法、内部类、构造器 |
public | ✔ | ✔ | ✔ | ✔ | 属性、方法、内部类、构造器、外部类 |
方法
-
声明方法
1、 声明方法 1、先声明后使用 2、位置:类中方法外 3、格式: [修饰符] 返回值类型 方法名(形参列表){ 方法体(实现该功能的代码); } 2、形参:定义/声明方法时()中的参数。 实参:调用方法时传入的参数。 3、形参是基本数据类型时,传值;当是引用数据类型时,传引用(地址)
注意:String对象不可变,还有包装类等对象
-
调用方法
1、静态方法 非本类 类名.方法名(); 本类 方法名(); 2、非静态方法 对象.方法名();
-
方法的特点
1、先声明后调用 2、不调用不执行,调用一次执行一次 3、方法最多有一个返回值;可以没有返回值,当返回值数量大于1时,用数组或者集合装起来后,返回 4、方法可以嵌套调用,但是不可以嵌套定义。
-
方法的重载(Overload)
定义:(1)相同类中的两个或多个方法(2)方法名相同,形参列表不同(类型、个数、顺序)(3)与返回值类型无关。
-
命令行参数:给主方法(main)传递实参。
cmd 模式下》》 java 类名称 实参1 实参2 实参3 ....
-
可变参数
某个方法调用时,实参的个数是可变的。 (1)一个方法最多有一个可变参数 (2)必须放在最后 public int qiuhe(int... num){//num本质是数组 int sum = 0; for(int i=0;i<num.length;i++){ sum += num[i]; } } 如何调用? (1)传递相同类型的参数0~n个 (2)可以传递相同类型的数组
构造器
1、有什么作用
(1)创建对象时,并为属性赋值。
2、有什么特点
(1)所有类都有构造器,如果这个类没有显示声明构造器,将默认有无参构造,若加了构造器,则不再有无参构造器。
(2)构造器可以重载
(3)构造器名和类名相同
3、如何声明
【修饰符】 构造器名(){}
【修饰符】 构造器名(形参列表){}
4、怎么调用构造器
在非本类中 类名 变量名 = new 类名();
this关键字
用法:
this.属性;
当成员变量与局部变量重名时,成员变量前加this,加以区分。
this.方法();
this代表当前对象。
this();
表示访问本类的无参构造,有形参时,访问有参构造。必须在构造器中第一句。
super关键字
super.属性
当子类与父类的某个可见的属性“重名”时,用“super.”表示访问父类的属性
super.方法();
当子类需要调用父类重写的方法时,需要加"super."
super();
只能出现在子类构造器的首行。
默认出现的是super(),表示调用父类的无参构造器。你写不写我都存在。
如果父类没有无参构造,必须在子类的构造器首行,用super(实参列表)调用父类的构造器。
包的概念 package
-
作用
1、避免类的重名 2、用于控制访问权限 3、划分项目的结构层次,通常将功能相近的类划分到同一个包中
-
规则
1、用package定义包,位于源文件首部 2、包的命名规范 xxx.yyy.zzz(通常以所在公司的域名的倒置)
-
导包 import
1、位置:package和class之间 2、import 包名.类名; import 包名.*;
构造器
1、每个类都有构造器
2、当没有显示声明构造器时,默认提供无参的构造器;当显示声明构造器时,则不再提供无参构造器,若需要还需显示声明。
构造器的特点
1、没有返回值
2、构造方法名和类名一样
3、可以重载