80 PM撸代码之Android【武侠讲封装、继承、多态】

简介: 80 PM撸代码之Android【武侠讲封装、继承、多态】

今天分享一篇PM撸代码系列Android之【武侠讲封装、继承、多态】



这是Android系列的第六篇文章,在之前的一篇文章中,已经了解了面向对象的基础概念,这一篇将会通过武侠江湖的类比,讲解面向对象的更多内容,感谢小伙伴们一直以来的支持。

武林门派的三个特征

1 独门秘籍(封装)

2 传承的门派(继承)

3 看情况使功夫和换个姿势说明问题(多态)


【封装】

d34714954ea97cd01c2054e0b4cec1f0.jpg

1 门派独门秘籍(封装)

前一篇已经说到,当达摩上了嵩山以后,江湖就正式进入门派时代。每个门派区别于其他门派,肯定是因为这个门派拥有独门武功秘籍。举个栗子你就懂了:

  • 少林派独门秘籍:《易筋经》、《九阳神功》、《少林七十二绝技》
  • 丐帮独门秘籍:《降龙十八掌》、《打狗棒法》
  • 逍遥派独门秘籍:《北冥神功》、《八荒六合唯我独尊功》、《天山折梅手》

对应的面向对象的程序中,一个类(注意停顿。。。)区别于另外一个类的重要原因就是这个类拥有自己的封装属性。封装的作用,就是保护某些属性和方法不被外部看见,就像武侠里,每个门派的独门秘籍和功夫套路,基本上是传内不传外的。

换句话说,就是你门派的独门秘籍(私有属性),别人不能随便访问,只有通过一定的方法才能访问,这样让属于你门派的东西更加安全。

2 如何封装

武侠版帮派 丐帮

{


   独门秘籍 降龙十八掌;

   独门秘籍 打狗棒法;


}


----------------------------------程序版class GaiBang

{


   private String Xianglong;


   private String Dagou;


}

(程序封装是通过关键字private哦)

3 你为什么需要秘籍呢?

(1)创立门派需要秘籍

假如你是逍遥老祖,你是无崖子、天山童姥、李秋水的师傅,虚竹的师祖。你穷尽毕生心血创立的武功,总是需要一个秘密的地方存放的吧,不然随便就被别人学了过去,你还怎么当绝顶高手啊?(我觉得逍遥老祖是金庸系列里功夫排名前5的狠角色。。。)

门派 逍遥派
{
    独门秘籍 神秘的秘籍书;
    穷尽心血写就秘籍(书){
        神秘的秘籍书=书
    }
    获得之前写的秘籍(){
        时空闪回,让你回忆起自己之前写的秘籍;
    }
    对外吹牛
    {
        我们逍遥派的绝顶神功是神秘的秘籍书,像你这样的,我们一个打你们八个,怎么样,加入我们吧,目前开班价9.9折,一共998,你就能把北冥神功带回家。
    }
}
真实发生的故事(){
    逍遥派 逍遥老祖;
    逍遥老祖是逍遥派出身的;
    逍遥老祖穷尽毕生心血写就“北冥神功”,并把它存入门派;
    逍遥老祖在某次高峰论坛使用了技能“对外吹牛”;
}

(2)在程序世界里,你需要私有属性(加private),它们不能轻易访问,只能通过一定的方法访问(通过setget方法即可完成对封装属性的访问和设置)。

class XiaoYao
{
    private String book;//声明私有属性(秘籍)
    //声明吹牛方法,用户向小白宣传你的门派
    void talk(){
        System.out.println(“我们逍遥派的绝顶神功是”+getBook()+“,像你这样的,我们一个打你们八个,怎么样,加入我们吧,目前开班价9.9折,一共998,你就能把北冥神功带回家。”)
    }
    //setBook方法用于将你毕生心血写就的秘籍存入私有属性book中,你终于可以安心的翻牌睡觉了。。。
    public void setBook(String str){
        book=str;
    }
    //getBook方法用于在你的门派内部将秘籍取出,记得洗干净手哈。。。
    public void getBook(){
        return book;
    }
}
public class Test{
    public static void main(String[] args){
        XiaoYao XiaoYaoLaoZu=new XiaoYao;
        XiaoYaoLaoZu.setBook(“北冥神功”);
        XiaoYaoLaoZu.talk();
}setBook把“北冥神功”传入了你的门派,然后你通过“吹牛方法”调用了getBook,将你刚才传入的秘籍说给大家听。


【继承】

37907b081387c71a146b2e8d1bb56191.jpg

史上最困扰哲学家的一个问题:这个世界上究竟是先有蛋,还是先有鸡呢?我们这里不讨论哲学的终极问题,说到这里,哲学的终极问题有哪些呢?我还挺感兴趣的,有空了解一下^_^。

扯远了,武侠的世界跟Java的世界真是高度类似,就连继承都很一致。

武侠世界里,门派也是有继承关系的,举个栗子:

(1)少林派是其他所有门派的祖先

(2)天鹰教出自明教

(3)星宿派出自逍遥派

无论是什么情况,你的门派只能继承另一个门派,而不能是同时继承两个门派。

(1)你创立一个门派想同时继承武当和丐帮,你想得很美,想同时学会太极拳和降龙十八掌,但是你愿意,人家不愿意,白搭。。。

(2)但是这样的继承是允许的:星宿派出自逍遥派,逍遥派出自少林达摩

门派 少林{
    武功 基础拳脚功夫;
}
门派 逍遥派 继承 少林派{
    武功 八荒六合唯我独尊功;
}
门派 星宿派 继承 逍遥派{
    武功 化功大法;
}
(因为是继承关系,逍遥派和星宿派都会少林派的基础拳脚功夫)

而在Java的世界里,一个类也只可以继承另一个类,而不能同时继承多个类。对于面向对象的程序而言,它的精华在于类的继承可以以既有的类为基础,进而派生出新的类。

class ShaoLin{
    String BasicKongfu;
}
class XiaoYao extends ShaoLin{
    String bahuangliuheweiwoduzungong;
}
class XingXiu extends XiaoYao{
    String huagongdafa;
}
(Java中类的继承要用到关键字extends哦,不要忘记了)


【多态】

d66d5cf1d2a9a17115485ba829f9ff1c.jpg

多态在程序中就是方法的重载重写。什么是重载和重写呢?

(1)重载:方法名称相同,参数的类型和个数不同 重载在武侠世界里,就像看情况使功夫,根据你的套路不同,而选择不同的对策。少林寺非常出名的“少林72绝技”,根据你使用的不同套路,达摩院的掌院和尚就能识别出你是用的哪些功夫:

功夫 少林72绝技{
    你耍了一套功夫(拳法){
        你使用了少林罗汉拳;
    }
    你耍了一套功夫(拳法,指法){
        你使用了少林罗汉拳和无相劫指;
    }
    你耍了一套功夫(拳法,脚法,指法){
        你使用了你使用了少林罗汉拳、无相劫指,还有如影随形腿;
    }
}

用程序语言就像下面,重载就是根据你传入的参数个数来选择调用不同的构造方法。

class ShaoLin72JueJi{
    public void ShaoLin72JueJi(String quan){            
        System.out.println("你使用了少林罗汉拳");
    }
    public void ShaoLin72JueJi(String quan,String zhi){
        System.out.println("你使用了少林罗汉拳和无相劫指");
    }
    public void ShaoLin72JueJi(String quan,String jiao,String zhi){
        System.out.println("你使用了少林罗汉拳和无相劫指,还有如影随形腿");
    }
}


(2)重写:方法名称、参数的类型、返回值类型全部相同,但完成的功能不同

重写往往出现在子类继承父类中,武侠里,星宿派出自逍遥派,他们的独家内功是一样的,逍遥派对外宣称他们的独门内功是“北冥神功”,而星宿派对外宣称他们的独门内功是“化功大法”。其实就是“换个姿势说明问题”。

门派 逍遥派{
    对外吹牛(){
        逍遥派独门内功——北冥神功;
    }
}
门派 星宿派 继承 逍遥派{
    对外吹牛(){
        星宿派独门内功——化功大法;
    }
}

程序语言是这样的。。。

class XiaoYao{
    public void DuJiaNeiGong(){
        System.out.println("逍遥派独门内功——北冥神功");
    }
}
class XingXiu extends XiaoYao{
    public void DuJiaNeiGong(){
        System.out.println("星宿派独门内功——化功大法");
    }
}


目录
相关文章
|
2月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
33 1
|
2月前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异:从代码到用户体验
【10月更文挑战第5天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。它们在技术架构、开发环境及用户体验上有着根本的不同。本文通过比较这两种平台的开发过程,揭示背后的设计理念和技术选择如何影响最终产品。我们将深入探讨各自平台的代码示例,理解开发者面临的挑战,以及这些差异如何塑造用户的日常体验。
|
3月前
|
存储 Java Android开发
🔥Android开发大神揭秘:从菜鸟到高手,你的代码为何总是慢人一步?💻
在Android开发中,每位开发者都渴望应用响应迅速、体验流畅。然而,代码执行缓慢却是常见问题。本文将跟随一位大神的脚步,剖析三大典型案例:主线程阻塞导致卡顿、内存泄漏引发性能下降及不合理布局引起的渲染问题,并提供优化方案。通过学习这些技巧,你将能够显著提升应用性能,从新手蜕变为高手。
36 2
|
4月前
|
JSON JavaScript 前端开发
Android调用Vue中的JavaScript代码
Android调用Vue中的JavaScript代码
50 3
|
4月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
很多文章都介绍了FTPClient如何连接ftp服务器,但却很少有人说如何连接一台开了SSL认证的ftp服务器,现在代码来了。
116 2
|
5月前
|
存储 Java Android开发
🔥Android开发大神揭秘:从菜鸟到高手,你的代码为何总是慢人一步?💻
【7月更文挑战第28天】在Android开发中,每位开发者都追求极致的用户体验。然而,“代码执行慢”的问题时常困扰着开发者。通过案例分析,我们可探索从新手到高手的成长路径。
43 3
|
4月前
|
Android开发 iOS开发
Android项目架构设计问题之将隐式跳转的逻辑进行抽象和封装如何解决
Android项目架构设计问题之将隐式跳转的逻辑进行抽象和封装如何解决
50 0
|
4月前
|
Java Android开发
Android项目架构设计问题之要提升代码的可读性和管理性如何解决
Android项目架构设计问题之要提升代码的可读性和管理性如何解决
45 0
|
4月前
|
编解码 API 开发工具
Android平台轻量级RTSP服务模块二次封装版调用说明
本文介绍了Android平台上轻量级RTSP服务模块的二次封装实践,旨在简化开发流程,让开发者能更专注于业务逻辑。通过`LibPublisherWrapper`类提供的API,可在应用中轻松初始化RTSP服务、配置视频参数(如分辨率、编码类型)、启动与停止RTSP服务及流发布,并获取RTSP会话数量。此外,还展示了如何处理音频和视频数据的采集与推送。最后,文章提供了从启动服务到销毁资源的完整示例,帮助开发者快速集成实时流媒体功能。
|
5月前
|
API Android开发
Android 监听Notification 被清除实例代码
Android 监听Notification 被清除实例代码
下一篇
DataWorks