目录
一.类与对象
类:把具有相同属性和行为的一类对象抽象为类。
对象:某个类的一个实体。
类与对象的区别
1.类是抽象的,概念的,代表一类事物(数据类型)
2.对象是具体的,实际的,代表一个具体的事物(引用类型)
3.类是对象的模板,对象是类的一个个体,对应一个实例
创建类
- 语法结构:
[修饰符列表] class 类名{
属性:
方法:
}
- 例:
Public class Hello{
}
例:Public class Hello{
}
- 注意:
- 类名要与文件名一致
- 类名首字母要大写
创建对象
对象要根据类来创建,同时要用关键字new 来创建
例
Scanner myScanner = new Scanner();
二.属性
用来描述具体某个对象的特征。描述的是对象的状态信息,通常以变量的形式进行定义。
变量通常分为成员变量和局部变量
例
class Person{
int age;
double salary;
}
在类体中,方法体之外定义的变量称为“成员变量”
- 成员变量定义在类体中,在整个类中都可以被访问
- 成员变量分为类变量和实例变量,实例变量存在于对象所在的堆内存中
- 成员变量有默认初始化值
- 成员变量的权限修饰符可根据需要,选择任意一个
- 创建对象后才能访问的变量称为实例变量
定义在方法内,代码块内的变量称为局部变量
- 局部变量定义在局部范围内
- 局部变量存在于栈内存中
- 作用范围结束,变量空间自动释放
- 局部变量无默认值,每次必须显示初始化
- 局部变量声明时不指定权限修饰符
三.方法重载
方法重载:如果同一个类中包含了两个及两个以上方法名相同,方法参数的个数、顺序或者类型不同的方法,则称为方法的重载。
注意事项与使用细节
- 同一个类中,方法名称一致
- 方法参数的个数、类型或者顺序不一致
- 与返回值、访问修饰符无关
例
四.可变参数
Java允许将同一个类的多个同名功能但参数个数不同的方法,封装成一个方法,就可以通过可变参数实现。
-
基本语法
访问修饰符 返回类型 方法名(数据类型... 形参名){
}
-
注意事项与使用细节
- 可变参数的实参可以为0个或者任意多个
- 可变参数的实参可以是数组
- 可变参数的本质就是数组
- 可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
- 一个形参列表中只能出现一个可变参数
五.构造方法(构造器)
构造方法是类的一种特殊方法,他的主要作用是完成对新对象的初始化
-
特点:
- 方法名与类名相同
- 没有返回值
- 在创建对象时,系统会自动调用该类的构造器完成对象的初始化
例:
-
注意事项与使用细节
- 一个类可以定义多个不同的构造器,即构造器重载
- 构造器名和类名要相同
- 构造器没有返回值
- 构造器是完成对象的初始化,并不是创建对象
- 在创建对象时,系统自动的调用该类的构造方法
- 如果没有定义构造器,系统会自动给类生成一个默认无参构造器(默认构造器)
- 一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器,除非显示定义一下
-
this 关键字
this关键字代表本类
注意事项与使用细节
- this 关键字可以用来访问本类的属性,方法,构造器
- this用来区分当前类和局部变量
- 访问成员方法的语法:this.方法名(形参列表)
- 访问构造器语法:this(形参列表),注意只能在构造器中访问另一个构造器,必须放在第一条语句
- this不能在类定义的外部使用,只能在类定义的方法中使用
六.面向对象三大特征
封装
封装就是把抽象出的数据(属性)和对数据的操作(方法)封装在一起,数据被保护在内部,程序在其他部分只有通过被授权的操作(方法),才能对数据进行操作。
封装的好处
- 隐藏实现细节
- 可以对数据进行验证,保证安全合理
封装的实现步骤
- 将属性进行私有化private(不能直接修改属性)
- 提供一个公共的(public)set方法,用于对属性判断并赋值
- 提供一个公共的(public)get方法,用于获取属性的值
继承
继承可以解决代码复用,让编程更接近人类思维。当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性方法,所有的子类不需要重新定义这些属性和方法,只需要通过extends来声明继承父类即可
- 继承的好处
- 代码的复用性提高了
- 代码的拓展性和维护性提高了
- 基本语法
class 子类 extends 父类{
}
- 子类就会自动拥有父类定义的属性和方法
- 父类又称超类,基类
- 子类又称派生类
细节
子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问,但是私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问子类必须调用父类的构造器,完成父类的初始化当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过如果希望指定去调用父类的某个构造器,则显示的调用一下super(参数列表)super在使用时,必须放在构造器第一行(super只能在构造器中使用)super()和this()都只能放在构造器第一行,因此这两个方法不能共存在一个构造器Java使用类都是object类的子类,object是所有类的基类父类构造器的调用不限于直接父类,将一直往上追溯直到object类(顶级父类)子类最多只能继承一个父类(指直接继承),即Java中的单继承机制不能滥用继承,子类和父类之间必须满足is-a的逻辑关系
多态
多态同一个行为具有多个不同表现形式或形态的能力。是指一个类实例(对象)的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。