6-2.Java 面向对象 - 中级(包、访问修饰符、封装、继承、super、方法重写、多态、动态绑定机制、面向对象相关方法)

一、包

1、基本介绍
  • 包的本质就是创建不同的文件夹来保存类文件
  1. 定义包
package 【包名】;
  1. 引入包
import 【包名】;
2、包的作用
  1. 区分相同名字的类

  2. 可以很好的管理类

  3. 控制访问权限

3、包的命名
(1)基本介绍
  • 命名规则:只能包含数字、字母、下划线、小圆点,不能用数字开头,不能是关键字或保留字

  • 命名规范:一般是小写字母 + 小圆点

(2)演示
  1. 公司开发
com.【公司名】.【项目名】.【业务模块名】;
  1. 团队开发
team.【团队名】.【项目名】.【业务模块名】;
4、常用包
说明
java.lang.*基本包,默认引用
java.util.*系统提供的工具包,有大量工具类
java.net.*网络包
java.awt.*GUI
5、注意事项
  1. package:作用是声明当前类所在包,需要放在最上方,一个类中最多只有一条 package 语句

  2. import:需要放置在 package语句下方


二、访问修饰符

1、基本介绍
  1. 公开级别:public,对外公开

  2. 受保护级别:protected,对子类和同一个包中的类公开

  3. 默认级别:无修饰符,向同一个包的类公开

  4. 私有级别:private,只有类本身可以访问

访问级别访问修饰符同类同包不同类(不含子类)同包子类不同包不同类(不含子类)不同包子类
公开public
受保护protected-√(注意)
默认无修饰符--
私有private----
2、注意事项
  1. 访问修饰符可以用来修饰类中的属性,成员方法

  2. 只有 public 和无修饰符才能修饰类

3、演示
  1. 同类
package com.my.modifier;public class A {public int n1 = 100;protected  int n2 = 200;int n3 = 300;private int n4 = 400;public void m() {System.out.println(n1);System.out.println(n2);System.out.println(n3);System.out.println(n4);}
}
  1. 同包不同类(不含子类)
package com.my.modifier;public class B {public void m() {A a = new A();System.out.println(a.n1);System.out.println(a.n2);System.out.println(a.n3);
//        System.out.println(a.n4); // 'n4' has private access in 'com.my.modifier.A'}
}
  1. 不同包不同类
package com.my.modifier.test;import com.my.modifier.A;public class C {public void m() {A a = new A();System.out.println(a.n1);
//        System.out.println(a.n2); // 'n2' has protected access in 'com.my.modifier.A'
//        System.out.println(a.n3); // 'n3' is not public in 'com.my.modifier.A'. Cannot be accessed from outside package
//        System.out.println(a.n4); // 'n4' has private access in 'com.my.modifier.A'}
}
  1. 同包子类
package com.my.modifier;public class Ac1 extends A {public void m() {System.out.println(n1);System.out.println(n2);System.out.println(n3);
//        System.out.println(n4); // 'n4' has private access in 'com.my.modifier.A'}
}
  1. 不同包子类
package com.my.modifier.test;import com.my.modifier.A;public class Ac2 extends A {public void m() {System.out.println(n1);System.out.println(n2);
//        System.out.println(a.n3); // 'n3' is not public in 'com.my.modifier.A'. Cannot be accessed from outside package
//        System.out.println(a.n4); // 'n4' has private access in 'com.my.modifier.A'}
}

三、封装

1、基本介绍
  • 把数据和对数据的操作进行封装,数据被保护在内部,只有通过被授权的操作才能对数据进行操作
2、封装的好处
  1. 隐藏实现细节

  2. 对数据进行验证,保证安全合理

3、封装的实现步骤
  1. 将属性私有化

  2. 提供一个公共的 set 方法,用于对属性判断并赋值

  3. 提供一个公共的 get 方法,用于获取属性的值

4、具体实现
  • Person.java
package com.my.intermediate;public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}// 获取 name 的 get 方法public String getName() {return name;}// 设置 name 的 set 方法public void setName(String name) {this.name = name;}// 获取 age 的 get 方法public int getAge() {return age;}// 设置 age 的 set 方法public void setAge(int age) {this.age = age;}
}

四、继承

1、基本介绍
  • 当多个类存在相同的属性和方法时,可以从中抽取出父类,在父类中定义相同的属性和方法,子类则只需继承父类
class 子类 extends 父类 {}
  1. 父类又名超类,基类

  2. 子类又名派生类,子类会拥有父类定义的属性和方法

2、注意事项
  1. 子类继承了父类所有的属性和方法,但是子类不能直接访问父类的私有属性,需要通过公共的方法

  2. 子类创建对象时会调用父类的无参构造器,完成父类初始化

  3. 子类创建对象时,如果父类没有提供无参构造器,则必须在子类的构造器中使用 super 指定使用父类的某个构造器完成父类初始化

  4. 显式调用父类的构造器

super(【参数列表】);
  1. super 需要放置在构造器的第一行

  2. super 和 this都只能放在构造器第一行,二者不能共存

  3. Java 中的所有类都是 Object 的子类

  4. 父类构造器的调用不限于直接父类,将一直往上追溯到 Object 类(顶级父类)

  5. 子类最多只能继承一个父类

3、具体实现
  • ExtendsTest.java
package com.my.intermediate;public class ExtendsTest {public static void main(String[] args) {Student student = new Student("小明", 12);Teacher teacher = new Teacher("张老师", 30);student.say();teacher.say();}
}// 父类
class People {private String name;private int age;public People(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}// 子类
class Student extends People {public Student(String name, int age) {super(name, age);}public void say() {System.out.println("我是学生" + getName());}
}// 子类
class Teacher extends People {public Teacher(String name, int age) {super(name, age);}public void say() {System.out.println("我是老师" + getName());}
}

五、super

1、基本介绍
  • super 代表父类的引用,用于访问父类的属性,方法,构造器
  1. 访问父类属性,但不能访问父类的私有属性
super.【属性名】;
  1. 访问父类方法,但不能访问父类的私有方法
super.【方法名】;
  1. 访问父类构造器
super(【参数列表】);
2、super 的好处
  • 调用父类构造器,分工明确,父类属性由父类初始化,子类属性由子类初始化
3、注意事项
  1. 子类和父类中的成员(属性或方法)重名时,访问父类成员,必须使用 super,如果没有重名,使用 super 和 this 访问效果一致

  2. super 的访问不限于直接父类,如果多个基类中都有同名的成员,super 的访问遵循就近原则


六、方法重写

1、基本介绍
  • 方法重写就是子类有一个方法,和父类的某个方法的名称,返回类型,参数一致
2、注意事项
  1. 子类重写方法的形参列表,方法名称,要和父类方法的形参列表,方法名称一致

  2. 子类重写方法的返回类型和父类的返回类型一致,或者是父类返回类型的子类

  3. 子类重写方法不能缩小父类方法的访问权限

3、具体实现
  • OverwriteTest.java
package com.my.intermediate;public class OverwriteTest {public static void main(String[] args) {Dog dog = new Dog();dog.shout();}
}class Animal {// 父类的 shout 方法public void shout() {System.out.println("动物哇哇叫!!!");}
}class Dog extends Animal{// 进行方法重写,父类的 shout 方法@Overridepublic void shout() {System.out.println("小狗汪汪叫!!!");}
}

七、多态

1、基本介绍
  • 方法或对象具有多种形态,建立在封装和继承的基础之上
2、多态的具体体现
(1)方法的多态
  • 方法的重载和重写体现多态
(2)对象的多态
  1. 一个对象的编译类型和运行类型可以不一致
Animal animal = new Dog(); // 编译类型是 Animal,运行类型是 Dog
animal = new Cat(); // animal 的运行类型变为 Cat,编译类型仍是 Animal
  1. 对象的编译类型在定义对象时就确定了,不能改变

  2. 对象的运行类型是可以改变的

3、注意事项
  1. 多态的前提是两个对象(类)存在继承关系

  2. 属性没有重写

4、具体实现
  • PolyObjectTest.java
package com.my.intermediate;public class PolyObjectTest {public static void main(String[] args) {Person person1 = new Student();Person person2 = new Driver();person1.say();person2.say();}
}class Person {public void say() {System.out.println("自我介绍");}
}class Student extends Person {@Overridepublic void say() {System.out.println("我是学生");}
}class Driver extends Person {@Overridepublic void say() {System.out.println("我是司机");}
}
5、补充
(1)向上转型
  • 本质是父类的引用指向子类的对象
【父类类型】 【引用名】 = new 【子类类型】();
  • 可以调用父类的所有成员,但需遵守访问权限,不能调用子类的特有成员
(2)向下转型
【子类类型】 【引用名】 = (【子类类型】) 【父类引用】;
  1. 只能强转父类的引用,不能强转父类的对象

  2. 要求父类的引用必须指向当前目标类型的对象

  3. 可以调用子类中的所有成员

(3)instanceOf 比较操作符
  • 判断对象的运行类型是否为某类型或某类型的子类型
6、多态的应用
(1)基本介绍
  1. 多态参数:方法定义的形参类型为父类类型,实参类型允许为子类型

  2. 多态数组

(2)具体实现
  • PolyObjectExercise.java
package com.my.intermediate;public class PolyObjectExercise {public static void main(String[] args) {Master master = new Master("杰克");Dog dog = new Dog("阿黄");Cat cat = new Cat("咪咪");Meat meat = new Meat("肉");Fish fish = new Fish("鱼");master.feed(dog, meat);master.feed(cat, fish);// 测试向上转型System.out.println("====================");Animal animal1 = new Dog("大黄");animal1.sleep(animal1);// 测试向下转型System.out.println("====================");Animal animal2 = new Cat("大橘");Cat myCat = (Cat) animal2;myCat.shout(myCat.getName());// 测试比较操作符System.out.println("====================");System.out.println(dog instanceof Dog);System.out.println(dog instanceof Animal);}
}class Master {private String name;public Master(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void feed(Animal animal, Food food) {System.out.println("主人" + this.getName() + "给" + animal.getName() + "喂食" + food.getName());}
}class Animal {private String name;public Animal(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void sleep(Animal animal) {System.out.println(animal.name + "在睡觉");}
}class Food {private String name;public Food(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}class Dog extends Animal {public Dog(String name) {super(name);}
}class Cat extends Animal {public Cat(String name) {super(name);}public void shout(String name) {System.out.println(name + "喵喵叫");}
}class Meat extends Food {public Meat(String name) {super(name);}
}class Fish extends Food {public Fish(String name) {super(name);}
}
  • PolyArrTest.java
package com.my.intermediate;public class PolyArrTest {public static void main(String[] args) {Person[] persons = new Person[5];persons[0] = new Person("杰克", 20);persons[1] = new Teacher("张老师", 30, 3000);persons[2] = new Teacher("王老师", 40, 4000);persons[3] = new Student("小明", 12, 89);persons[4] = new Student("小李", 14, 78);// 遍历多态数组for (int i = 0; i < persons.length; i++) {if (persons[i] instanceof Student) {((Student) persons[i]).study();} else if (persons[i] instanceof Teacher) {((Teacher) persons[i]).teach();} else {System.out.println(persons[i].say());}}}
}class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String say() {return "name: " + name + ", age: " + age;}
}class Student extends Person {private double score;public Student(String name, int age, double score) {super(name, age);this.score = score;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}@Overridepublic String say() {return super.say() + "  score:" + score;}// 特有方法public void study() {System.out.println(this.getName() + "在学习");}
}class Teacher extends Person {private double money;public Teacher(String name, int age, double money) {super(name, age);this.money = money;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}@Overridepublic String say() {return super.say() + "  money" + money;}// 特有方法public void teach() {System.out.println(this.getName() + "在教学");}
}

八、动态绑定机制

1、基本介绍
  1. 当调用对象方法时,该方法会和该对象的内存地址 / 运行类型绑定

  2. 当调用对象属性时,没有动态绑定机制,哪里声明哪里调用

2、演示
  • DynamicBindingTest.java
package com.my.intermediate;public class DynamicBindingTest {public static void main(String[] args) {A a = new B();System.out.println(a.sum());System.out.println(a.newSum());}
}class A {int i = 10;public int sum() {return getI() + 10;}public int newSum() {return i + 10;}public int getI() {return i;}
}class B extends A {int i = 20;//    public int sum() {
//        return i + 20;
//    }public int newSum() {return i + 10;}public int getI() {return i;}
}
  • 输出结果
30
30

九、相关方法

1、== 与 equals 方法
(1)基本介绍
  1. == 即可以判断基本数据类型,又可以判断引用数据类型

  2. == 如果判断基本数据类型,判断的是值是否相等

  3. == 如果判断引用数据类型,判断的是地址是否相等

  4. equals 方法是 Object 类中的方法,只能判断引用数据类型

  5. equals 方法默认判断地址是否相等,子类往往会重写该方法,用于判断内容是否相等(例如 String)

(2)演示
  • EqualsExercise.java
package com.my.intermediate;public class EqualsExercise {public static void main(String[] args) {Person jack = new Person("jack", 10, '男');Person tom = new Person("tom", 10, '男');System.out.println(jack.equals(tom));}
}class Person {private String name;private int age;private char gender;public Person(String name, int age, char gender) {this.name = name;this.age = age;this.gender = gender;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public char getGender() {return gender;}public void setGender(char gender) {this.gender = gender;}// 重写 Object 的 equals 方法public boolean equals(Object obj) {// 如果比较的两个对象是同一个对象,那么直接返回 trueif (this == obj) {return true;}// 类型判断if (obj instanceof Person) {// 进行向下转型Person person = (Person) obj;return this.name.equals(person.name) && this.age == person.age && this.gender == person.gender;}// 不是 Person 类型,直接返回 falsereturn false;}
}
2、hashCode 方法
(1)基本介绍
  1. hashCode 方法用于返回该对象的哈希码值

  2. hashCode 方法主要是为了提高具有哈希结构的容器的效率

  3. 两个引用,如果指向的是同一个对象,则哈希值肯定一致

  4. 两个引用,如果指向的是不同对象,则哈希值不一致

  5. 哈希值主要是根据地址来计算的,但不能完全将哈希值等价于地址

(2)基本使用
  • HashCodeTest.java
package com.my.intermediate;public class HashCodeTest {public static void main(String[] args) {Person person1 = new Person();Person person2 = new Person();Person person3 = person1;System.out.println(person1.hashCode());System.out.println(person2.hashCode());System.out.println(person3.hashCode());}
}class Person {}
3、toString 方法
(1)基本介绍
  1. toString 方法默认返回:全类名(包名 + 类名) + @ + 哈希值的十六进制

  2. toString 方法的重写:返回对象的属性信息

  3. 当直接输出一个对象时,toString 方法会被默认调用

(2)基本使用
  • ToStringTest.java
package com.my.intermediate;public class ToStringTest {public static void main(String[] args) {Person person = new Person("jack", 20);System.out.println(person.toString());System.out.println(person);}
}class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}
4、finelize 方法
(1)基本介绍
  1. 当对象被回收时,系统自动调用该对象的 finelize 方法,子类可以重写该方法,做一些释放资源的操作

  2. 何时被回收:当某个对象没有任何引用时,JVM 会认为该对象是垃圾对象并使用垃圾回收机制销毁该对象,在销毁该对象前,会先调用 finelize 方法

  3. 垃圾回收机制:由系统决定调用,也可以通过调用 System.gc() 主动触发

(2)基本使用
  • FinelizeTest.java
package com.my.intermediate;public class FinelizeTest {public static void main(String[] args) {Car car = new Car("宝马");car = null;System.gc();System.out.println("程序结束了");}
}class Car {private String name;public Car(String name) {this.name = name;}@Overrideprotected void finalize() throws Throwable {System.out.println("销毁了" + name);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/59640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于MySQL的企业专利数据高效查询与统计实现

背景 在进行产业链/产业评估工作时&#xff0c;我们需要对企业的专利进行评估&#xff0c;其中一个重要指标是统计企业每一年的专利数量。本文基于MySQL数据库&#xff0c;通过公司名称查询该公司每年的专利数&#xff0c;实现了高效的专利数据统计。 流程 项目流程概述如下&…

canfestival主站多电机对象字典配置

不要使用数组进行命名&#xff1a;无法运行PDO 使用各自命名的方式&#xff1a;

【学生选课管理系统】项目笔记

项目难点 涉及到多个关联的数据库 脚手架 在这里我使用的是element-plus框架&#x1f449; 具体文献参考->element-plus官网 运行项目&#xff08;同时运行前端和后端&#xff09; program/xsxk/vue/package.jsonprogram/xsxk/springboot/src/main/java/com/example/Spri…

Git LFS

Git LFS&#xff08;Git Large File Storage&#xff09;是一个用于管理和版本控制大文件的工具&#xff0c;它扩展了 Git 的功能&#xff0c;帮助处理大文件或二进制文件的存储和管理问题。 为什么需要 Git LFS&#xff1f; Git 默认是针对文本文件进行优化的&#xff0c;尤…

bat批量处理脚本细节研究

文章目录 bat批处理脚本&#xff08;框架&#xff09;set变量设置基本语法显示环境变量 自定义环境变量临时环境变量和永久环境变量特殊环境变量和系统默认环境变量set命令利用选项的其他应用 !与%解析变量的区别/为什么使用setlocal enabledelayedexpansion区别%的规则!使用 %…

Java 网络编程(一)—— UDP数据报套接字编程

概念 在网络编程中主要的对象有两个&#xff1a;客户端和服务器。客户端是提供请求的&#xff0c;归用户使用&#xff0c;发送的请求会被服务器接收&#xff0c;服务器根据请求做出响应&#xff0c;然后再将响应的数据包返回给客户端。 作为程序员&#xff0c;我们主要关心应…

使用C++来编写VTK项目时,就是要写自己的算法

其实&#xff0c;使用VTK可以使用很多种语言&#xff0c;比如java&#xff0c;python&#xff0c;和C。那么为什么非要使用C 呢&#xff1f;一个原因是觉得C语言处理数据比较快&#xff0c;另一个原因是需要自己写算法。通过继承polyDataAlgorithm来写自己的算法&#xff0c;很…

【RK3588 Linux 5.x 内核编程】-等待队列(WaitQueue)

等待队列(WaitQueue) 文章目录 等待队列(WaitQueue)1、等待队列介绍2、等待队列初始化2.1 静态初始化2.2 动态初始化3、队列任务排队3.1 wait_event3.2 wait_event_timeout3.3 wait_event_cmd3.4 wait_event_interruptible3.5 wait_event_interruptible_timeout3.6 wait_ev…

[ 内网渗透实战篇-2 ] 父域子域架构的搭建与安装域环境判断域控定位组策略域森林架构配置信任关系

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

unity c# Tcp网络通讯

本篇附带源代码&#xff0c;带有处理拆包分包粘包&#xff0c;也会撰明具体内容。 首先对于tcp就是挥手机制&#xff0c;三次握手四次挥手机制。 一、三次握手 具体过程为简单解释为&#xff1a; 1、客户端请求服务器链接&#xff0c;等待服务器确认。&#xff08;服务器如…

FileLink跨网数据摆渡系统:打破网络隔阂,轻松实现跨网络数据传输

在数字化时代&#xff0c;跨网络、跨区域的数据传输成为了企业和个人信息流通的重大挑战。而如今&#xff0c;FileLink跨网数据摆渡系统的问世&#xff0c;彻底解决了这一难题&#xff0c;帮助用户实现快速、安全、无缝的跨网络数据传输。 1. 跨网络数据传输的痛点 随着企业信…

高级 SQL 技巧详解

文章目录 高级 SQL 技巧详解一、引言二、窗口函数1、窗口函数的使用1.1、RANK() 函数示例1.2、常用窗口函数 三、公共表表达式&#xff08;CTE&#xff09;2、CTE 的使用2.1、CTE 示例 四、索引优化3、索引的创建与优化3.1、创建索引3.2、索引类型与注意事项 五、事务管理4、事…

MySQL_聚合函数分组查询

上篇复习&#xff1a; 设计数据库时的三大范式1.第一范式&#xff0c;一行数据中每一列不可再分 关系型数据库必须要满足第一范式&#xff0c;设计表的时候&#xff0c;如果每一列都可以用SQL规定的数据类型描述&#xff0c;就天然满足第一范式. 2.第二范式&#xff0c;在第一…

【Ai教程】Ollma安装 | 0代码本地运行Qwen大模型,保姆级教程来了!

我们平时使用的ChatGPT、kimi、豆包等Ai对话工具&#xff0c;其服务器都是部署在各家公司的机房里&#xff0c;如果我们有一些隐私数据发到对话中&#xff0c;很难保证信息是否安全等问题&#xff0c;如何在保证数据安全的情况下&#xff0c;又可以使用大预言模型&#xff0c;O…

FastAPI全方位分析:优劣尽显

近年来,随着技术的飞速发展,快速构建高性能API的需求越来越强烈。Python作为一个广泛使用的编程语言,也在这一领域下涌现出了许多优秀的框架。FastAPI便是其中一颗璀璨的新星。 FastAPI以其卓越的性能和独特的功能吸引了众多开发者。本文将深入剖析FastAPI的各个方面,详细…

LongVU :Meta AI 的解锁长视频理解模型,利用自适应时空压缩技术彻底改变视频理解方式

Meta AI在视频理解方面取得了令人瞩目的里程碑式成就&#xff0c;推出了LongVU&#xff0c;这是一种开创性的模型&#xff0c;能够理解以前对人工智能系统来说具有挑战性的长视频。 研究论文 "LongVU&#xff1a;用于长视频语言理解的时空自适应压缩 "提出了一种革命…

二分答案—愤怒的牛-P1676 [USACO05FEB] Aggressive cows G

[USACO05FEB] Aggressive cows G 题目描述 农夫约翰建造了一座有 n n n 间牛舍的小屋&#xff0c;牛舍排在一条直线上&#xff0c;第 i i i 间牛舍在 x i x_i xi​ 的位置&#xff0c;但是约翰的 m m m 头牛对小屋很不满意&#xff0c;因此经常互相攻击。约翰为了防止牛之…

什么是兼容性测试

兼容性测试&#xff0c;提供具有兼容性特性的云端设备&#xff08;覆盖主流品牌、SDK、分辨率&#xff09;&#xff0c;通过模拟用户行为进行真机测试。及时有效的发现应用中存在的兼容性问题。解除测试人员的双手&#xff0c;提高测试效率&#xff0c;保证产品在海量真机上的高…

IDEA:ctrl+/ 快捷键生成的注释,设置“//”开始位置

问题场景&#xff1a; IDEA中使用 ctrl/ 快捷键&#xff0c;//显示在最左边&#xff08;顶格&#xff09;&#xff0c;不美观&#xff0c;中间隔了好长的空格&#xff0c;如图&#xff1a; 解决方法: 操作步骤 File–>Sttings–>Editor–>Code Style–>Java–>…

中文文章进行加密编码及解码的方法python实现

愿我们终有重逢之时,而你还记得我们曾经讨论的话题。 group 868373192 second group 277356808 在Python中,可以使用多种方法对中文文章进行加密编码及解码。以下是几种常见的方法: 1. 使用Base64编码 Base64是一种基于64个可打印字符来表示二进制数据的编码方式。它可以…