5.安卓逆向-java面向对象

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:图灵Python学院

上一个内容:4.安卓逆向-常用数据结构java语言中的集合

之前的内容写了java语言常用的数据结构(数据类型),也就是List、Set、Map这三个数据结构(数据类型),本次和前面的内容混个眼熟就行,主线是逆向,逆向对编程语言(java语言)要求不高认识就行,本次是java中最后一个核心面向对象

面向对象的意思和作用就不写了(写多了也看不下去),这些概念性的不写点代码根本想象不出来描述的是什么东西,脑子里完全就没有画面,所以会把一些很抽象的概念省略,通过看代码的方式来掌握(如果感觉会写代码或看得懂代码,但不知道什么概念不知道什么专业名字这是正常的,就没打算达到这个效果,主线是逆向,概念是正向要搞的对于逆向不重要)

不用担心下方代码看不懂导致玩不会逆向,下方和之前的内容只要过一遍(随便看)就行,逆向的过程会写的超级细,全程超傻瓜模式

下方代码需要复制,挨个运行一遍,看看结果

声明一个类,java中类就是一个面向对象的具象化,如下图的代码,类这个字也很抽象,直接看具象化(下方的代码)从main方法开始看

// class声明类的单词,ClallDemo类的名字,类是面向对象的具象化
// 类是用来描述某一个东西的
public class ClallDemo {//变量String name; // 类里面的变量int age;// 方法// 类里面的方法,方法的意思就是一块代码,方法避免了重复写相同逻辑的代码,也就是给相同逻辑的代码起了一个名字// 等看到方法的使用就能明白了public void call() { System.out.println(name + "正在打电话");}public void message() {System.out.println(name + "今年" + age + "岁了");}public static void main(String[] args) {// new ClallDemo()意思是创建一个ClallDemo类(类型),或者说创建一个ClallDemo类型的对象// ClallDemo t = new ClallDemo();就是面向对象的具象化// 后面只要写面向对象,指的就是类// 然后这个t是用来接收(这里的接收可以理解为面向)对象的,然后通过t这个名字就可以使用ClallDemo类型来处理数据ClallDemo t = new ClallDemo(); // 调用变量t.name = "小明";t.age = 18;// 调用方法t.call(); // 使用方法t.message();// 若不需要对象名,也可以直接使用对象new ClallDemo().message();}
}

然后还有一个构造方法的东西,构成方法可以理解为创建某个类型时执行的代码

class Person {// 实例变量public String name;public Integer age;// 构造方法1public Person() {this.name = "Eric";// 执行 new Person() 这个代码就会跳到这里来到这里执行this.age = 99999;}
}Person obj = new Person();

然后还有相同名字,执行不同代码的方式,这个被称为重载,从main方法开始看

class Person {// 实例变量public String name;public Integer age;public String email;// 私有成员变量只能在类的内部进行直接赋值,而不能在类的外部或子类中直接访问private String count;// 构造方法1public Person() {// 通过入参不同,实现相同名字,入参就是括号里的东西this.name = "xialuo";this.age = 99999;}// 构造方法2public Person(String name, Integer age) {// 通过入参不同,实现相同名字,入参就是括号里的东西this.name = name;this.age = age;this.email = "xxx@live.com";}// 构造方法3public Person(String name, String email) {// 通过入参不同,实现相同名字,入参就是括号里的东西this.name = name;this.age = 83;this.email = email;}// 定义方法(重载)public void doSomething() {// 通过入参不同,实现相同名字,入参就是括号里的东西System.out.println(this.name);}// 定义方法(重载)public void doSomething(String prev) {// 通过入参不同,实现相同名字,入参就是括号里的东西String text = String.format("%s-%s", prev, this.name);System.out.println(text);}}public class Hello {public static void main(String[] args) {// 创建对象Person p1 = new Person();Person p2 = new Person("xialuo", 73);Person p3 = new Person("tony", "xialuo@xxx.com");p1.doSomething();p1.doSomething("你好呀,");p2.doSomething();p2.doSomething("你好呀,");p3.doSomething();p3.doSomething("你好呀,");}
}

静态变量静态方法,静态变量有点特殊,从main方法开始看

class Persons1 {// 静态变量public static String city = "北京";// 当一个变量被final修饰时,表示该变量的值不能被修改public final String color = "red";// 实例变量public String name;public Integer age;// 构造方法1public Persons1() {this.name = "xialuo";this.age = 99999;}// 绑定方法public void showInfo(){System.out.println("哈哈哈哈");}// 静态方法public static void showData(){System.out.println("哈哈哈哈");}// 实例方法public String showInfos(){return  "实例方法";}// 静态方法public static String showInfos1(){return  "hello world";}
}public class Person {public static void main(String[] args) {System.out.println(Persons1.city);Persons1.showData();Persons1 obj = new Persons1();System.out.println(obj.name);System.out.println(obj.age);obj.showInfo();obj.showInfos();Persons1.city = "aaaaa";System.out.println(obj.city);}
}

运行结果:可以发现静态变量是所有类型共用的,并且不需要创建对象就可以使用静态变量(静态方法也能使用)

然后继承,继承是为了解决避免重复写多个类型共有的变量(包含静态和非静态)和方法(包含静态和非静态)

// 父类
class Bases {public String email;public static String sssss;public Bases(String email) {this.email = email;}public void getSubInfo() {System.out.println("111");}}// 子类,Bases类
class Persons extends Bases {public String name;public int age;public Persons(String name, Integer age, String email) {super(email);// 执行父类的构造方法this.name = name;this.age = age;}public void getSubInfos() {System.out.println("222");}
}// 子类,Bases类
class CCCC extends Bases {public String bbbb;public int aaaa;public Persons(String name, Integer age, String email) {super(email);// 执行父类的构造方法this.bbbb = name;this.aaaa = age;}public void getSubInfos() {System.out.println("222");}
}public class Main {public static void main(String[] args) {Persons persons = new Persons("hello",20,"www.xialuo.com");CCCC cc = new CCCC("hhhh",70,"www.x33333uo.com");System.out.println(cc.city);persons.getSubInfo();  // 继承自Bases类的方法persons.getSubInfos(); // 子类中定义的方法}
}

实例2:

class Base {public void show() {System.out.println("111");}
}class Person extends Base {public void show() {System.out.println("222");}
}Person v1 = new Person();
v1.show(); // 222Base v2 = new Base();
v2.show(); // 111Base v3 = new Person();
v3.show();  // 222

实例3:从main方法开始看

class Base {public String email;public Base(String email) {this.email = email;}public void getSubInfo() {System.out.println("111");}
}// Person类继承Base类
class Person extends Base {public String name;public Person(String name, Integer age, String email) {super(email);// 执行父类的构造方法this.name = name;}public void getSubInfo() {System.out.println("222");}
}public class Hello {public static void handler(Base v1){v1.getSubInfo();}// 主函数public static void main(String[] args) {Person obj1 = new Person("xialuo",19,"xxx@live.com");handler(obj1); // 222Base obj2 = new Base("xialuo@live.com");handler(obj2); // 111Base obj3 = new Person("xialuo",19,"xxx@live.com");handler(obj3); // 222}}

接口:从main方法开始看

interface IMessage { // 使用 interface单词定义一个接口,interface IMessage意思是创建一个叫IMessage的接口public void send();
}// Wechat类"实现"了Imessage接口
class Wechat implements IMessage {public void send() {System.out.println("发送微信");}
}class DingDing implements IMessage {public void send() {System.out.println("发送钉钉");}
}class Sms implements IMessage {public void send() {System.out.println("发送短信");}
}IMessage v1 = new Wechat();
public class Hello {public static void handler(IMessage v1){v1.send();}// 主函数public static void main(String[] args) {DingDing v1 = new DingDing();handler(v1);}
}
interface IPerson {public void f1();public void f1(int age);public void f2(String info);
}interface IUser {public String f3(int num);
}class Base {public String name;public Integer age;public String email;public Base(String name, Integer age, String email) {this.name = name;this.age = age;this.email = email;}public String getSubInfo() {return String.format("%s", this.email);}
}class Person extends Base implements IUser, IPerson {// 可以实现(implements)多个接口,但只能继承(extends)一个类public Person(String name, Integer age, String email) {super(name, age, email);}public String getInfo() {return String.format("%s-%d-%s", this.name, this.age, this.email);}public void f1() {System.out.println("F1,无参数");}public void f1(int age) {System.out.println("F1,age参数");}public void f2(String info) {System.out.println("F2");}public String f3(int num) {return "哈哈哈";}
}public class Hello {public static void main(String[] args) {Person p = new Person("日天", 83, "ritian@live.com");p.f1();}
}

抽象:它和类一样,它和类的区别是它不能使用new创建对象

// 抽象类
abstract class Base {// abstract让类变成抽象类// 抽象方法(约束子类中必须有这个方法)public abstract void play(String name);// 普通方法public void stop() {System.out.println("Stop");}
}class Son extends Base{public void play(String name){ // 实现Base类中的play方法// ...}
}Son obj = new Son();
obj.stop();
obj.play();Base obj1 = new Son();

效果:如果对抽象类使用new就会报错,它会说没有实现play方法,抽象类还必须要有一个抽象方法,没有抽象方法会报错需要改成普通类


img

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

OpenAI o1:AI领域的“草莓”革命,华人科学家贡献卓越

最近,科技界的热门明星“草莓”频繁出现在大家的视线中。9月11号,The Information报道称:OpenAI计划在未来两周内推出一款更智能、更昂贵、更谨慎的AI模型!网友们对此消息持怀疑态度,认为类似消息屡见不鲜,…

创新数字生态:智慧园区的益处与影响

智慧园区是一种利用先进信息技术、智能设备和数据分析手段来提升管理效率、改善居住体验、节约资源以及推动可持续发展的新型城市发展模式。其好处和影响不仅局限于提高工作效率,还涉及社会、生态、经济等多个方面的积极影响。 好处 智能化管理优势: 智慧园区能够实…

mac上Charles怎么配置,可以抓取浏览器/IDEA的接口

一、抓取浏览器接口 1、下载安装Charles后,按下图操作安装证书,mac撒好难过要把证书调整为可信任 2、打开macOS代理 方式一:指点开启这里 方式二:进入代理配置中开启,结果和方式一一样的 3、这时就可以抓取到浏览器…

编写注册接口与登录认证

编写注册接口 在UserController添加方法 PostMapping("/login")public Result login(Pattern(regexp "^\\S{5,16}$") String username,Pattern(regexp "^\\S{5,16}$") String password){ // 根据用户名查询用户User loginUser userS…

8个前端库-小且美

前提:前端有很多小而美的库,接入成本很低又能满足日常开发需求,同时无论是 npm 方式引入还是直接复制到本地使用都可以。 1.radash radash相比与 lodash,更加面向现代,提供更多新功能(tryit,…

系统架构设计师教程 第5章 5.2需求工程 笔记

5.2 需求工程 ★★★★★ 软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望。 软件需求包括3个不同的层次:业务需求、用户需求和功能需求(也包括非功能需求)。 (1)业务需求 (business requirement) 反映了组织机构或客户对系统、产品高层次的目标…

哪款宠物空气净化器是除浮毛王者?希喂、范罗士、霍尼韦尔宠物空气净化器实测

养宠人绕不过的痛——掉毛!脱毛!又到了掉毛季,就连空气中都有毛毛……不管遇到谁,都知道你养猫养狗了——只因T恤变身毛线衫、毛毛怎么都粘不干净。不止是衣服上,地板上、沙发上、桌面上,哪哪都是毛。开始养…

[产品管理-15]:NPDP新产品开发 - 13 - 产品创新流程 - 具体产品的创新流程:精益生产与敏捷开发

目录 前言:​ 一、集成产品开发IPD模型——集成跨功能团队的产品开发 1.1 概述 1、IPD模型的核心思想 2、IPD模型的主要组成部分 3、IPD模型的实施步骤 4、IPD模型的优点 1.2 基于IPD系统的组织实践等级 1.3 IPD的优缺点 二、瀑布开发模型 1、定义与特点…

物体识别之微特征识别任务综述

“深度人工智能”是成都深度智谷科技旗下的人工智能教育机构订阅号,主要分享人工智能的基础知识、技术发展、学习经验等。此外,订阅号还为大家提供了人工智能的培训学习服务和人工智能证书的报考服务,欢迎大家前来咨询,实现自己的…

python安装换源

安装 python 使用演示的是python 3.8.5 安装完成后,如下操作打开命令行:同时按 “WindowsR” > 输入 “cmd” -> 点击确定 python换源 临时换源: #清华源 pip install markdown -i https://pypi.tuna.tsinghua.edu.cn/simple # 阿里…

个性化、持续性阅读 学生英语词汇量自然超越标准

2024年秋季新学年,根据2022版《义务教育英语课程标准》全新修订的英语新版教材开始投入使用,标志着我国英语教育迈入了一个以应用为导向、注重综合素养培养的新阶段。 新版教材的变革不仅仅是一次词汇量的简单增加,更是一场从应试到应用的深…

【鸿蒙】HarmonyOS NEXT星河入门到实战9-组件化开发进阶应用状态管理

目录 1.1 创建页面 1.2 页面跳转和后退 1.3 页面栈 1.4 路由模式 1.5 路由传参 2、生命周期 3、Stage模型 3.1 目录概览 3.2 app.json5应用配置 3.3 module.json5模型配置 3.4 UIAbility组件 3.5 UIAbility的添加和设置启动 3.6 UIAbility组件的生命周期 3.7 拉起另…

微信小程序基本信息填写要求(收藏)

小程序基本信息填写 小程序名称:小程序在发布前,名称设置成功以后有2次修改名称机会,2次机会用完,必须先发布后,才可通过微信认证进行改名。 小程序头像:新头像不允许涉及政治敏感与色情;图片格式必须为&…

使用nvm安装node版本报错

报错 windows 通过nvm安装版本,在本地安装了nvm后,通过nvm安装node报错了,报错如下图: 解决方法 1.如果你找不到相关配置文件在哪儿,可以打开vscode在终端输入nvm root,此时就会显示你的nvm配置文件路径&…

大顶堆+动态规划+二分

前言&#xff1a;我们这一题需要分类讨论 对于我们左边和右边的我们需要预处理 有点类似反悔堆的做法&#xff0c;得出i之前取出 m 个元素代价最小&#xff0c;并且这个代价一定是递减的&#xff08;可以推导一下&#xff09; 题目地址 #include<bits/stdc.h> using name…

【Jetson】Jetson Orin NX刷机教程

Jetson Orin NX刷机教程 一、硬件准备二、安装SDK Manager三、在线或离线刷机 一、硬件准备 需要将Jetson Orin NX的GND和FC_REC引脚短接&#xff0c;设备进入刷机模式。然后用Type-C线将其余主机连接&#xff0c;主机的选择可以为ubuntu虚拟机或者ubuntu系统。注意如果选择虚…

手机玩机常识____展讯芯片刷机平台ResearchDownload的一些基本常识与问题解决

展讯ResearchDownload工具 展讯芯片的刷机工具--ResearchDownload下载工具"是一款专为用户设计的高效、便捷的下载管理软件&#xff0c;它能够帮助用户快速、稳定地从互联网上获取各种文件。这款工具以其强大的功能和良好的用户体验&#xff0c;在众多展讯芯片下载工具中脱…

Spring扩展点系列-SmartInstantiationAwareBeanPostProcessor

文章目录 简介源码分析示例 简介 spring容器中Bean的生命周期内所有可扩展的点的调用顺序 扩展接口 实现接口ApplicationContextlnitializer initialize AbstractApplicationContext refreshe BeanDefinitionRegistryPostProcessor postProcessBeanDefinitionRegistry B…

Nginx.conf没有server和location模块的解决方法

网上有些说法说自己在配置文件里面添加server和location模块&#xff0c;但是我发现好像可以不用&#xff0c;其实nginx的配置文件还是给了我们提示的&#xff0c;如图&#xff1a; 在最后一行其实引入了另一个配置文件&#xff0c;我们cd进去看一下有什么内容。输入ls命令发现…

网络药理学:15、草稿暂存区(autodock vina)

TCMSP 韦恩图在线网站 https://bioinfogp.cnb.csic.es/tools/venny/index.html String数据库参数详解&#xff1a;https://www.bilibili.com/video/BV1q64y1k7Zf?p16&vd_sourceaed4c634975918b14b7354ec93ce5389 David数据库可以用基因ID或者基因名。 KEGG数据库使用&am…