面向对象
面向对象特点:封装、继承、多态
封装
封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节,这就是封装思想
继承
继承主要描述的就是类与类之间的关系,通过继承,基于无需重新编写原有类的情况,对原有类的功能进行扩展。继承不仅增强了代码的复用性,提高了开发效率,还为程序的维护提供了便利、
多态
多态指的是在一个类中定义的属性和功能被其他类继承后,当把子类对象之间赋值个父类引用变量时,相同引用类型的变量调用调用同一个方法所呈现出的多种不同行为特征。(不同的对象,所表现的行为是不一样的)
类与对象的关系
类是对某一类的事物的抽象描述,而对象用于表述现实中该类事物的个体
对象是类的具体化,一个类可以对应多个对象。
什么是对象的属性
属性:对象具有的各种特征,每个对象的每个顺序都有特定的值
什么是对象的行为
行为:对象能够执行的操作
类的定义
为了在程序中创建对象,首先需要定义一个类,。类是对象的抽象,他用于描述一组对象的共同特征和行为,例如人都有姓名、年龄、性别等特征,还有学习、工作、购物等行为。以面向对象的编程思想,就可以将某一类中共同的特征和行为封装起来,把共同特征作为类的属性(也叫成员变量),把共同行为作为类的方法(也叫成员方法)。
类的定义格式
使用class关键字来定义,语法格式如下:
[修饰符] class 类名 [extends 父类名] [implements 接口名]{
//类体,包括类的成员变量和成员方法
}
上述格式中,class前面的修饰符可以说public,也可以不写(默认);类名首字母需要大写,并且命名要符合标识符的命名规则;extends和implements是可选项,均为Java中的关键字。extends用于说明所定义的类继承于哪个父类,implements关键字用于说明当前类实现了哪些接口
声明(定义)成员变量
类的成员变量也被称做类的属性,它主要用于描述对象的特征。例如,一个人的基本属性特征有姓名、年龄、职业、住址等信息,在类中要使用姓名、年龄等信息,就需要先将它们声明(定义)为成员变量。
声明成员变量语法格式如下:
[修饰符] 数据类型 变量名 [=值];
修饰符为可选项,用于指定变量的访问权限,其值可以是public、private等;变量名可以赋予初始值,也可以不赋值。通常情况下,将未赋值(没有被初始化)的变量称为声明变量,而赋值(初始化)的变量称为定义变量
例如,姓名和年龄属性在类中的声明和定义方式如下;`
private String name; //声明一个String类型的name
private int age=20; //定义一个int类型的age,并赋值为20
声明(定义)成员方法
成员方法也被称为方法,它主要用于描述对象的行为。
定义一个方法的语法格式如下:
[修饰符] [返回值类型] 方法名([参数类型 参数名1,参数类型 参数名2,...]){
//方法体
...
return 返回值; //当方法的返回值类型为void时,return及其返回值可以省略
}
{}之前的内容被称为方法签名(或方法头),而{}中的执行语句被称为方法体。方法名中的[参数类型 参数名1,参数类型 参数名2,...]
被称作为参数列表,它用于描述在被调用时需要接收的参数,如果方法不需要接受参数,则参数列表为空,即()内不写任何内容。
return关键字:用于结束方法以及返回方法指定类型的值,当方法的返回值类型为void,return及其返回值可以省略
返回值:被return语句返回的值,该值会返回给调用者。
注意
在java中,定义在类中的变量被称作为成员变量,定义在方法中的变量被称作为局部变量。如果在某一个方法中定义的局部变量和成员变量同名,这种情况是允许的,此时方法中通过变量名访问到的是局部变量,而非成员变量
成员变量和局部变量的区别
类中的位置不同:成员变量在类中的方法外,局部变量在方法内或在方法声明上
内存中位置不同:成员变量在堆内存,局部变量在栈内存
生命周期不同:成员变量随着对象的存在而存在,随着对象的消失而消失。 局部变量随着方法的调用而存在,随着方法的调用完毕而消失
初始化值不同:成员便有默认的初始化值,局部变量没有默认的初始化值,必须先调用,赋值,才能使用
对象的创建与使用
应用程序想要完成具体的功能,还需要根据类创建实例对象。Java中可以使用new关键字来创建对象,具体语法格式如下:
类名 对象名称 =new 类名();
例如,创建Person类的实例对象代码如下:
Person p =new Person();
在创建Person对象后,可以通过对象的引用来访问对象所有的成员,具体格式如下:
对象引用.对象成员
访问控制符
private(私有):当类中属性或方法被private修饰时,表示此成员或方法只能被自己类中的方法使用,而不能被外部类或对象直接使用
default(默认):具有包访问权限,如果类中属性或方法不使用public,protected,private修饰符修饰时,则说明其具有包访问权限,具有包访问权限的属性或方法既可以被自己类中的方法使用也可以被同一包下的其他类使用,但不能被其他包中的类使用。
protected(保护):具有子类访问权限。如果类中属性或方法被protected修饰符修饰,则此类中属性或方法可以被同一包下的类使用,也可以被不同包下的子类使用,但不能被不同包下的其他类使用。
public(公共):具有公共访问权限。如果类中的属性或方法被public修饰,则此类中的属性或方法可以被任何类调用。
访问控制级别
类的封装
类的封装,是指将对象的状态信息隐藏在对象内部,不运行外部程序总直接访问对象的内部信息,而是通过该类所提供的方法来实现对内部信息的操作访问
具体的实现过程是,在定义一个类时,将类中的属性私有化,即使用private关键字来修饰。私有属性只能在它所在类中被访问,如果外界需要访问私有属性,需要提供一些使用public修饰的公用方法,其中包括获取属性值的getXxx()方法和设置属性值的setXxx()方法
方法的递归
方法的递归是指在一个方法的内部调用自身的过程。递归必须要有结束条件,不然就会陷入无限递归的状态,永远无法结束调用。
使用递归算法计算自然数之和示例代码:
public static int getSum(int n){
//整个递归过程在n==1时结束
if (n==1){
//满足条件,递归结束
return 1;
}
//在getSum方法中调用了自身(方法的递归)
int temp=getSum(n-1);
return temp+n;
}
public static void main(String[] args) {
int sum=getSum(4);
System.out.println("sum="+sum);
}
构造方法
如果需要在实例化对象的同时就为这个对象的属性进行赋值,可以通过构造方法来实现。构造方法(也被称作为构造器)是类的一个特殊成员,它会在类实例化对象时被自动调用。
构造方法的语法格式与定义成员方法的语法格式相似,其语法格式如下:
[修饰符] 方法名 ([参数列表]){
//方法体
}
上述语法格式所定义的构造方法需同时满足以下三个条件:
①方法名与类名相同
②在方法名的前面没有返回值类型的声明
③在方法中不能使用return语句返回一个值,但是可以单独写return语句来作为方法的结束
this关键字
在java中提供了一个关键字this来指代当前对象,用于在方法中访问对象的其他成员
this关键字在程序中常见的3种用法:
1.通过this关键字调用成员变量,解决与局部变量名称冲突问题。示例代码如下:
class Person{
int age; //成员变量age
public Person(int age){ //局部变量
this.age=age; //将局部变量age的值赋给成员变量age
}
}
2.通过this关键字调用成员方法。示例代码如下:
class Person{
public void openMouth(){
......
}
public void speak(){
this.openMouth();
}
}