一、什么是面向对象
面向过程:线性思维
面向对象:以类的方式组织代码,以对象的方式组织数据
- 同一个包指同一层级,即同一目录层级下
- 子类和父类在同一包下,子类可使用除private外的父类成员;
- 子类和父类不在同一包下,子类只能使用protected和public的父类成员
二、回顾方法
2.1 方法的定义
- 修饰符
- 返回类型
- break:(跳出switch,结束循环)和return(结束方法,返回结果)区别
- 方法名:注意规范、见名知意
- 参数列表:参数类型、参数名,可变长参数
- 异常抛出:后面讲解
2.2 方法的调用
- 静态方法(可通过类调用)和非静态方法(只能通过实例调用),static
- 形参和实参
- 值传递和引用传递
- this关键字:代表类的实例,和python中的self类似,this可以提高程序可读性,不写不影响代码执行;this指向实例自身
- this.什么时候不能省略:用来区分局部变量和实例变量的时候,不能省
三、类与对象的创建
3.1 使用new关键字创建对象
//Student.java
package com.oop.demo01;
//学生类
public class Student {
//属性
String name; //默认值null
int age; //默认值0
//方法
public void study(){
System.out.println(this.name+"在学习");
}
}
//Application.java
package com.oop.demo01;
//一个项目应该只存在一个main方法
public class Application {
public static void main(String[] args) {
//类实例化后返回一个对象
//student对象就是Student类的一个具体实例
// Student student = new Student();
// student.study();
Student jack = new Student();
Student rose = new Student();
jack.name = "jack";
jack.age = 11;
System.out.println(jack.name);
System.out.println(jack.age);
System.out.println(rose.name);
System.out.println(rose.age);
}
}
3.2 构造器详解
- 一个类即使什么都不写,也会存在一个方法;
- 构造器:名称必须和类名相同;必须没有返回类型,也不能写void,类似python的__init__方法
this()等同于调用构造器方法
package com.oop.demo01;
public class Person {
//显式定义构造器
String name;
//实例化初始值
//使用new关键字,本质实在调用构造器
//无参定义
public Person(){
this.name = "default";
}
//有参定义;定了有参构造,还想使用无参构造,则需显示定义无参构造
public Person(String name){
this.name = name;
}
}
生成构造器快捷键
3.3 创建对象内存分析
四、封装
将属性私有化,通过get和set方法访问和修改,在set方法中添加安全性校验
private关键字:私有,只能在类内部访问,类外部无法访问
public:类内部和外部都能访问
package com.oop.demo02;
public class Student {
//属性私有
private String name; //名字
private int age; //年龄
private char gender; //名字
//提供一些可以操作属性的方法
//提供一些public的get、set方法
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public void setAge(i