文章目录
面向对象oop
面向对象的三大特点(封装,继承,多态)
封装:代码不能任意修改,增强代码的安装性。
封装的原则是:将属性隐藏起来,若想要访问类中的某个属性,提供公共的访问方法对其访问。
封装的步骤:
1. private关键字来修饰(私有的修饰符)成员变量(也叫成员属性)
2. 对需要访问的成员变量提供get()和set()方法,注解:get是取值,set是赋值
封装时的权限控制符区别如下:
private | default | protected | public | |
---|---|---|---|---|
同一类中 | ✔ | ✔ | ✔ | ✔ |
同一包中 | ✔ | ✔ | ✔ | |
子类 | ✔ | ✔ | ||
全局范围 | ✔ |
private的含义:
1.private是一个权限修饰符,代表最小的访问修饰符
2. 可以修饰成员变量(即全局属性),也可以修饰成员方法
3. 被private修饰的成员变量和成员方法只能在本类中访问
private的使用格式:
private 数据类型 变量名
封装的优势:
- 良好的技能,减少代码之间的耦合行
- 类内部的结构可以随意更改
- 可以对全局属性(即成员变量)进行更精确的控制
- 隐藏信息,实现细节
(对内隐藏信息,对外提供公共的使用方法)
封装优化1:
set()方法中形参名字不符合标识符的命名规范(见名知意),若修改成和成员变量相同的名字会触发java程序当中的就近原则,把方法内的变量变为形参,导致赋值失败,可以采用【this】关键字解决变量重名的问题
this:
this代表所在类的当前对象的引用(地址值),即对象对自己引用
方法被哪个对象调用,方法中的this指代的就代表的是哪个对象,即被谁调用,this就是谁
this的使用格式:
this.成员变量名
package example;
public class fengzhuang {
//1. 使用private修饰成员变量
private String name;
private int age;
//2.提供get和set方法,可以访问类中的成员变量,先写get再写set
//get获取类中的成员变量信息,
public String getName(){
return name;
}
//set设置类中的成员变量
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public void setAge(int age){
age = age;
}
}
使用this关键字修饰方法当中的成员变量,解决成员变量被隐藏的问题
封装优化2——构造方法:
-
当一个对象被创建的时候,构造方法用来初始化对象,给对象的成员变量赋初始值,
备注:构造方法可以不写,因为无论封装是否在封装类里定义构造方法,当类被定义出来时,系统会自动分配一个构造方法——无参构造方法,一旦在类中显示的定义构造方法java自动提供的默认无参构造就会被自动销毁(被回收)。 -
构造方法的定义格式:
修饰符 构造方法名(参数列表){
//方法体内容
}
//构造方法没有返回值,构造方法名要和类名保持完全一致
注意事项:- 构造方法的方法名必须要与类名保持一致
- 构造不用声明返回值类型,连void也不需要
- 构造中不能用return返回一个具体的值
- 定义类时无显示的定义构造方法,系统会自动给一个无参构造方法
- 一旦定义了构造方法,编译器会回收提供的隐式构造方法
- 构造方法可以重载,方法名相同,参数列表相同
继承:
多态:
类
具有相同的特点(属性)和行为(方法)的集合的总称
对象
是某一类事物具体的体现(实例),将类的抽象【概念具体化
属性
是一类事物的特点或特征
方法
是一类事物可以进行的行为或动作(方法的命名遵循驼峰方法,首字母小写,其余单词首字母大写)
[访问修饰符] 返回值类型 方法名(参数){…【方法内执行的语句】}
返回值类型:该方法执行后的结果的数据类型
基本数据类型/引用数据类型(int float double/string Array)
void 空,方法执行后,不返回任何数据
如果方法需要返回值
1. 需要在返回值类型处写上需要返回数据所对应的数据类型
2. 在方法体的最后需要使用return值的格式,将值明确返回
参数列表:
1. 形式参数:该方法执行可能会用到的数据
2. 形式参数的写法:数据类型,参数名
3. 列表内可写多个参数,也可不写
4. 有参数时,在使用方法时要调用,必须给参数先赋值
{}方法体
方法功能的具体体现:
无返回值,无参数
无返回值,有参数
有返回值,无参数
有返回值,有参数
两个引用指向一个对象,s1是对象名,也是变量,可以叫做对象的引用
s1应用的是内存中,堆内存中的对象的地址值,
student s2=s1,将s1的地址值赋值(引用)给s2,所以s1与s2操作的是同一个对象
定义位置 | 作用范围 | 初始值 | 在内存中的存储位置 | 生命周期 | 修饰符 | |
---|---|---|---|---|---|---|
成员变量 | 类中,方法外 | 类中 | 有默认值 | 堆内存 | 随着对象的创建而存在,对象消失就消失 | 可使用修饰符 |
局部变量 | 方法中或方法声明上(形式参数) | 方法中 | 无默认值, 必须先定义赋值再引用 | 栈内存 | 随着方法的调用而存在,调用结束就消失 | 不使用修饰符 |
java与scala的异同:
相同
同样具有与java一样的基本数据类型:byte,short,int,long,chart,float,double,string,boolean,
不同
不同的是:scala定义的这些基本数据类型都是类,例如Int类型是scala.int类;string类型没有自己定义类,完全使用java里java.Lang.String下的String类。
字面量
例子:
val i=123//123是整数字面量
val i=3.14//3.14是浮点字面量
val i=true//布尔字面量
val i='A'//字符字面量
val i="hello"//字符串字面量
注意:
在scala中,可以使用加(+),减(-),乘(*),除(/)等操作符,而且操作符就是方法,例如,5+3就等同于5.+(3)
eg. a 方法 b 等同于 a.方法(b)