面向对象有三大特征:封装、继承、多态
面向对象、过程,是需要一个区分的:
面向过程:打开冰箱、 存储东西进冰箱、 关闭冰箱门。
面向对象:冰箱.打开、冰箱.存储、冰箱.关闭。
类是对现实生活中 对事物的描述,里面包括属性、行为。
对象是这类事物实实在在存在的个体,每个个体都有他们的功能。
万物皆对象这句话不是说说而已,里面有大智慧。
而这句话只有有一定道行的人说出来才有味道。
初学者说这句话未免会显得哗众取宠。
成员变量:作用于整个类中。存在堆内存中,因为对象的存在才在内存中存在。
局部变量:作用于函数语句中。存在于栈内存中。
匿名对象:是对象的简化形式。
匿名对象使用事项:
1,匿名对象只能使用唯一一次,下次再用需要再new一个。
2,只要确定这个对象只需要使用一次 就可以用匿名对象。
格式:
new 类名称( );
//------------------------------------
public class Demo1{
public static void main (String [ ] args){
//普通方式
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
//匿名对象
int num = new Scanner(System.in).nextInt();
System.out.println("输入的是:"+ num);
}
}
封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:将变化隔离,便于使用,提高重用性和安全性。
原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。
封装的步骤
1 使用private关键字来修饰成员变量。
2 对需要访问的成员变量提供一堆getxxx、setxxx方法。
private的含义
- private是一个权限修饰符,代表最小权限。
- 可以修饰成员变量和成员方法。
- 被private修饰后的成员变量和成员方法,只在本类中才能访问。
private的使用格式
private 数据类型 变量名;
//1. 使用 private 修饰成员变量,代码如下:
public class Student{
private String name;
private int age;
}
//2.提供 getXxx 方法 / setXxx 方法,可以访问成员变量,代码如下:
public class Student{
private String name;
private int age;
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
public void setAge(int a) {
age = a;
}
public int getAge() {
return age;
}
}
封装优化 --this关键字
方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。
this 使用格式
this.成员变量名;
构造方法:构造方法就是用来创建对象的方法,当我们通过关键字new来创建对象的时候,其实就是调用的该方法。
格式:
public 类名称(参数类型 参数名称){
方法体
}
public class Student{
public Student(){
System.out.println("构造方法执行");
}
}
注意事项:
1 构造方法的名称必须和所在的类名称完全一样,大小写都要一样的。
2 构造方法不需要写返回值类型。连void都不写。
3 构造方法不能return一个具体的返回值。
4 如果没有编写任何构造方法 那么编译器将会默认赠送一个构造方法 没有参数和方法 什么事儿都不做。但是如果你编写了,编译器就不会赠送构造方法。
5 构造方法也可以重载(重载:方法名称相同 参数列表不同)
一个标准的类通常由四部分组成:
1 所有的成员变量都亚欧用private关键字修饰。
2 为每一个学员变量编写一对get/set方法
3 编写一个无参构造方法
4 编写一个有参构造方法
这种标准的类也叫做JavaBean
例子:
public class Student {
//成员变量
private String name;
private int age;
//构造方法
public Student() {}
public Student(String name,int age) {
this.name = name;
this.age = age;
}
//成员方法
publicvoid setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
publicvoid setAge(int age) {
this.age = age;
}
publicint getAge() {
return age;
}
}