封装:是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体细节
面向对象 | 封装了属性和方法的类,以数据为中心,实现了类级别的代码重用,有继承和多态 |
面向过程 | 函数,以功能为中心实现了函数级的代码的重用,没有继承和多态 |
实现:
- 在定义一个类时,将类中的属性私有化,即使用private关键字来修饰
- 私有属性只能在它所在的类中被访问,如果外界想要访问私有属性,需要提供一些使用public修饰的公有方法
Java中,针对类、成员方法和属性提供了4种访问级别(private—>default—>protected—>public)
构造方法
构造方法是一个特殊的方法,用于创建对象并初始化数据
特点:没有返回值;参数可以是多个,但都必须是类中的属性;
问题:
1. 上述案例中有两个构造方法,为什么有多个构造方法?
利用构造方法的重载可以实现多个构造方法【重载】在同一个类中,多个方法拥有相同的名字,但方法的参数列表不同(即参数个数、顺序、类型不同)
2. 没有写构造方法是否就没有构造方法?
没有写构造方法,Java虚拟机会默认生成一个没有任何参数的公共的构造方法
3. 普通的方法能否有多个名称相同的方法?
相同名称的普通方法也可以有多个,这些方法的参数列表必须不一样
示例:Getter and Setter
使用封装后的get,set方法来访问对象中的属性
创建文件夹(包)entity用于存放实体,创建文件(类)Penguin
创建get(获取),set(传入)方法
在需要添加方法处右键—>Generate—>选择Getter/Setter/Getter and Setter—>选择需要添加方法的属性—>OK
生成的方法代码如下:
package text.entity;
/**
* @ClassName : Penguin 企鹅类
* @Description : Penguin
* @Author : mt
* @Date: 2023-08-04 10:22
*/
public class Penguin {
private String name; //昵称
private int health; //健康值
private String sex; //性别
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
创建测试类
出现可调用的封装方法
package text;
import text.entity.Penguin;
/**
* @ClassName : PenguinText
* @Description : PenguinText
* @Author : mt
* @Date: 2023-08-04 10:30
*/
public class PenguinText {
public static void main(String[] args) {
Penguin penguin = new Penguin();
penguin.setName("Q仔");
penguin.setHealth(100);
penguin.setSex("男");
System.out.println(penguin.getName()+","+penguin.getHealth()+","+penguin.getSex());
}
}
示例:构造器Constructor
创建对象的初始化
出现报错:
解决:创建对象的初始化时就要赋予参数值
如下赋值,报错解决
示例:构造器实现方法重载
同时创建含有两个参数的构造函数以及没有参数的构造函数的
生成代码如下:
在初始化时,赋三个参数值默认调用带三个参数的构造方法;赋三个参数值则默认调用带两个参数的构造方法,这也叫做方法的重载
ststic关键字
ststic表示“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块
静态方法只能访问静态的属性,不能访问非静态的成员变量
示例
三个学生是相同的班级,如下这样表示,每个p1.classes = "1001";都占用了内存空间
使用静态属性Person.classes="1001";只赋值一次,其他都可以统一使用,减少内存消耗
package text.entity;
/**
* @ClassName : Person
* @Description : Person
* @Author : mt
* @Date: 2023-08-04 11:13
*/
public class Person {
String name;
static String classes;
//静态方法
public void print(){
System.out.println("班级"+classes+"的同学"+name);
}
//非静态方法
public void show(){
System.out.println(name);
}
//普通方法的重载(例:传入一个str进行拼接)
public void show(String str){
System.out.println(name+"");
}
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "张三";
//p1.classes = "1001";
Person.classes="1001";
Person p2 = new Person();
p2.name = "李四";
//p2.classes = "1001";
Person p3 = new Person();
p3.name = "王五";
//p3.classes = "1001";
p1.print();
p2.print();
p3.print();
}
}
主要参考: