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

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

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

武林门派的三个特征

1 独门秘籍(封装)

2 传承的门派(继承)

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

【封装】

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,将你刚才传入的秘籍说给大家听。

【继承】

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

扯远了,武侠的世界跟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哦,不要忘记了)

【多态】

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

(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("星宿派独门内功——化功大法");
    }
}
时间: 2024-10-07 05:22:22

PM撸代码之Android【武侠篇:封装、继承、多态】的相关文章

PM撸代码之Android【绝顶高手排行榜】

82 PM撸代码之Android[绝顶高手排行榜] 这是Android系列的第七篇文章了,也是关于Java语言的最后一篇文章了.这一篇后,我们将正式开始Android的学习.不过这一篇大家还是要好好地学一下,把Java的基础打好,那么学Android将会事半功倍的. 不久前,公众号的文章已经突破20万字了,我还是挺高兴的,一共发了80多篇文章了.规划中的文章还有很多,希望我能一直写下去吧,没有你们的支持,我是不可能有动力码那么多字的.接下来也不会一直发布Android的教程,而是会穿插地发表文章

封装继承多态到底讲的是什么

封装继承多态到底讲的是什么 封装.继承.多态并不是针对C#语言提出来的,他是一个在面向对象思想下产生的一个概念.所以想要弄明白封装.继承.多态,首先就要先了解面向对象概念. 封装:当我们提及面向对象的时候,这个对象怎么来?就是通过我们人为的封装得来.封装就是把一些特征或功能组合到一个抽象的对象上.就比如说电脑:它的特征是有一个显示屏,有一个主机,有鼠标和键盘等等.功能有计算等.那我们把这些特征和功能组合到“电脑”这个抽象的名词上时,“电脑”于是就有了这些特征和功能.但这个“电脑”不是实物,它代表

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

三大特性:封装,继承,多态

透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础. 三大特性是:封装,继承,多态 所谓封装: 也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性. 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体.在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问.通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

面向对象的三大特性---封装继承多态

面向对象的三大特性---封装继承多态 首先我们来创建一个控制台程序 新建一个父类Person 创建一个子类继承父类Person 子类: main函数: 输出结果: 根据结果显示创建子对象,首先调用父类的构造函数在调用子类的构造函数. 继承的传递性 例如: A:B,B:C,则A:C ⅰ.继承过来之后被隐藏,有意隐藏加一个关键字"new",如果加了关键字"new",就告诉子类,父类里面的sayHi只能被隐藏,不能被覆写  ⅱ.继承过来之后被覆写/重写,覆写需要在父类里面

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态

 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门 面向对象:大象, 你进冰箱. 此时主语是大象. 我操纵的是大象. 此时的大象就是对象 1. 面向过程: 一切以事物的流程为核心. 核心是"过程"二字, 过程是指解决问题的步骤, 即, 先?干什么, 后干什么. 基于该思想编写程序就好比在编写一套流水线. 是一种机械 式的编程

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ? 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以称为基类或超类,新建的类称为派生类或子类. ? 在Python中实现继承非常简单,在声明类的时候,在类名后面添加一个小括号,就可以完成继承关系.单纯的从代码的层面上来看当两个类具有相同的功能或者特征的时候就可以使用继承.提取一个父类,这个父类中编写者两个类相同的部分,然后两个类分别去继承这个类就可以