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

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

这是Android系列的第七篇文章了,也是关于Java语言的最后一篇文章了。这一篇后,我们将正式开始Android的学习。不过这一篇大家还是要好好地学一下,把Java的基础打好,那么学Android将会事半功倍的。

不久前,公众号的文章已经突破20万字了,我还是挺高兴的,一共发了80多篇文章了。规划中的文章还有很多,希望我能一直写下去吧,没有你们的支持,我是不可能有动力码那么多字的。接下来也不会一直发布Android的教程,而是会穿插地发表文章,还希望大家继续支持!

今天这篇文章的主要内容如下,我将继续用我的方式为你讲述原本枯燥的编程,今天将会加入金庸武侠绝顶高手排行榜哦,请耐心读完吧 ┑( ̄。。 ̄)┍

1 抽象类

2 接口

3 包及访问权限

【抽象类】

技术分享
Java可以专门创建一个类来做父类,这种类叫做抽象类。抽象类很奇怪,咋一看,根本不明白它到底有什么用。因为它只声明了方法,而没有实现。。。

首先说明几个注意事项:

1 抽象类抽象方法都必须使用abstract关键字声明

2 抽象类不能直接实例化,也就是不能直接用new关键字去产生对象

3 抽象方法只需声明,不需实现

4 抽象类的子类必须重写所有的抽象方法后,才能实例化,不然,这个子类还是个抽象类

5 特别注意,抽象类里的方法,既可以是抽象方法(加了关键字abstract),又可以是一般方法(不加abstract)

经过深入分析和类比,我发现,抽象类还是有一定作用的。抽象类就像“模(mu)板”,它可以让设计者根据它的格式来创建和修改新的类。

举个栗子你就懂了:

金庸武侠世界,被一代又一代的国人深深地喜爱,特别像《天龙》、《射雕》、《神雕》、《倚天》等优秀作品,大家耳熟能详。这么多作品,出了很多个大侠,而中国人又喜欢凡是排个座次,好吧,那我今天就借这个机会,给大家排一排,说得不好,求轻拍。。。

(1)绝顶高手排行榜

既然我要做排行榜,肯定是要先出一个进入排行榜的标准,换句话说,就是要出一个绝顶高手入榜模板。So,Let‘s do it.

绝顶高手的模板,需要了解该大侠是哪个门派的,然后再由各个门派推选出他们眼中的门派第一人(门派实例化对象)。首先,我们应该抽象出一个武林门派排行榜的模板。可能包含的信息有:大侠的名字大侠出自那一部金庸小说,还得有他功夫的描述,就像下面:

抽象的武林门派
{
    大侠的名字;
    大侠的出处;
    大侠的绝世武功;

    对大侠的描述(){
    }
}

因为这个申请入榜的大侠还没确定是谁、也不知道是哪个门派的,所以“对大侠武功的描述”这个方法是空的、抽象的,必须要等具体的申请人来了之后,才能确定这里面的内容是什么。

写成程序语言是下面这样的:

abstract class WuLinMenPai
{
    String DaXiaName;//大侠的名字
    String FromWhere;//大侠的出处
    String JueShiKongFu;//大侠的绝世武功描述

    public abstract String Description();//入榜申请描述
}

(2)踊跃申请入榜的大侠们

自从听说有一个绝顶高手排行榜的申请活动,金庸系列里的各个门派跃跃欲试,纷纷给出了自己门派的申请模板,举两个栗子:

少林派
{
    少林派申请的大侠(名字,出处,绝世武功)
    {
        大侠的名字=名字;
        大侠的出处=出处;
        大侠的绝世武功=绝世武功;
    }

    对申请人的描述(){
        说出“大侠:”+名字+“出处:”+出处+“我的绝世武功有:”+绝世武功;
    }
}

----------------------

逍遥派
{
    逍遥派申请的大侠(名字,出处,绝世武功)
    {
        大侠的名字=名字;
        大侠的出处=出处;
        大侠的绝世武功=绝世武功;
    }

    对申请人的描述(){
        说出“大侠:”+名字+“出处:”+出处+“我的绝世武功描述:”+绝世武功;
    }

程序版是这样子滴,对比一下,方便你理解:

少林派
class ShaoLin extends WuLinMenPai
{
    public ShaoLin(String DaXiaName,String from,String JueShiKongFu){
        DaXiaName=name;
        FromWhere=from;
        JueShiKongFu=kongfu;
    }

    public String Description()
    {
        return "大侠:"+DaXiaName+",出处:"+FromWhere+"我的绝世神功"+JueShiKongFu;
    }   
}   

---------------------

逍遥派
class XiaoYao extends WuLinMenPai
{
    public XiaoYao(String DaXiaName,String from,String JueShiKongFu){
        DaXiaName=name;
        FromWhere=from;
        JueShiKongFu=kongfu;
    }

    public String Description()
    {
        return "大侠:"+DaXiaName+"出处:"+FromWhere+"我的绝世神功描述:"+JueShiKongFu;
    }
}

然后,各门派都在自己门派内部给出了这个评判大侠的标准,于是就有很多门派大侠踊跃提出了申请,经过Glen武侠专家科学评审委员会的评定,

绝顶高手排行榜入围名单
{
    少林派 达摩=少林派申请的大侠("达摩","我来自金庸系列的很多地方,基本有少林的地方,就会提到我","《九阳神功》、《易筋经》、《少林72绝技》");

    逍遥派 逍遥老祖=逍遥派申请的大侠("逍遥老祖","来自天龙八部","《北冥神功》、《小无相功》、《凌波微步》、《八荒六合唯我独尊功》、《天山六阳掌》等,同时还精通医术、奇门遁甲,还长得帅。。。");

    对外宣传 达摩的描述();
    对外宣传 逍遥老祖的秒速(); 
}

-----------

程序版

class JueDingGaoShouRuWei
{
    public static void main(String[] args)
    {
        ShaoLin DaMo=new ShaoLin("达摩","我来自金庸系列的很多地方,基本有少林的地方,就会提到我","《九阳神功》、《易筋经》、《少林72绝技》,中国佛教的开山祖师爷");

        XiaoYao XiaoYaoLaoZu=new XiaoYao("逍遥老祖","来自天龙八部","《北冥神功》、《小无相功》、《凌波微步》、《八荒六合唯我独尊功》、《天山六阳掌》等,同时还精通医术、奇门遁甲,还长得帅。。。");
    }

    System.out.println(DaMo.Description());
    System.out.println(XiaoYaoLaoZu.Description());
}

---------------

输出的结果像下面这样,然后加上一些我个人认为顶尖武林高手的私人排行榜:

(排名第1)
大侠:达摩
出处:我来自金庸系列的很多地方,基本有少林的地方,就会提到我
我的绝世武功描述:《九阳神功》、《易筋经》、《少林72绝技》,中国佛教的开山祖师爷

(排名第2)
大侠:逍遥老祖
出处:来自天龙八部
我的绝世武功描述:《北冥神功》、《小无相功》、《凌波微步》、《八荒六合唯我独尊功》、《天山六阳掌》等,同时还精通医术、奇门遁甲,还长得帅。。。

(排名第3)
大侠:黄裳
出处:射雕英雄传
我的绝世武功描述:武林至尊典籍《九阴真经》的撰写者

(排名第4)
大侠:独孤求败
出处:神雕侠侣和笑傲江湖
我的绝世武功描述:《独孤九剑》、一生用剑至臻化境,利剑无意、软剑无常、重剑无锋、木剑无滞、无剑无招。。。

(排名第5)
大侠:前朝太监
出处:笑傲江湖
我的绝世武功描述:《葵花宝典》的原创者,东方不败仅仅练了12年一部分的《葵花宝典》,已经厉害成那样,不敢想象他是有多厉害。。。

【接口】

技术分享
之前介绍类时,我们说过Java是不支持多继承的,也就是说,子类在Java里只有一个父类,类比武侠世界,一个徒弟只能有一个师傅

但是,有时候现实情况很复杂,你只能有一个师傅,但是你想学习更多地武功,Java为了解决这个问题,就引入了接口的概念。

接口(interface)是Java实现多继承的一种机制,也是Java设计中最重要的一个环节,注意事项:

1 接口类似抽象类,但是接口中的数据成员必须初始化,且均为常量,举个例子:接口里定义一个年龄,int age=25,必须赋初值给age

2 接口里的方法必须全部声明为abstract,即接口不可以像抽象类一样既有抽象方法,又有一般方法

3 因为接口里的方法全部是抽象方法,所以abstract关键字可以省略;接口里的成员属性都是常量,所以final关键字也可以省略,但是童鞋们,不要忘记它们有加abstract和final的啊。。。

同样的,举武侠的栗子,方便你们理解:

(1)金庸系列里,人气最高的大侠——乔峰

很多人非常喜欢天龙八部里的乔峰大侠,用他做栗子来让大家理解接口的概念,我想是最好不过了。

我们知道,乔峰最开始是拜师少林的玄苦大师:

师傅 玄苦(少林)
{
    武功1 龙爪手(少林七十二绝技之一);
    武功2 降魔掌(少林七十二绝技之一);

    门派功夫描述()
    {
        我们少林的招牌武功是“龙爪手”和“降魔掌”;
    }
}

我们知道,乔峰后来成为了丐帮的帮主:

学功夫 汪剑通(丐帮前任帮主)
{
    武功1="降龙十八掌";
    武功2="打狗棒法";

    门派功夫描述()
    {
        我们丐帮的招牌武功是“降龙十八掌”和“打狗棒法”;
    }
}

于是,乔峰一身武学其实是集合了少林和丐帮的精华,但他真正的师傅,是他最开始拜师的玄苦大师,后面他进了丐帮,又学会的武学,但这个就不是真正意义上的拜师了,而是另一种契约关系,在武侠里是允许这样的关系的,而在Java里就要用到接口(interface)了:

玄苦大师是父类
class XuanKu
{
    String Kongfu1="龙爪手";//少林七十二绝技之一
    String Kongfu2="降魔掌";//少林七十二绝技之一
}

汪剑通是接口
interface WangJianTong
{
    String Kongfu3="降龙十八掌";
    String Kongfu4="打狗棒法";

    public void Description();//关于武功的描述
}

乔峰继承玄苦同时又以另一种契约方式继承汪剑通
class QiaoFeng extends XuanKu implements WangJianTong
{
    public void Description() {
        System.out.println(
        "乔峰会的功夫是"+Kongfu1+" "+
        Kongfu2+" "+Kongfu3+" "+Kongfu4);
    }
}

class Test
{
    public static void main(String[] args) {
        QiaoFeng QiaoFeng=new QiaoFeng();
        QiaoFeng.Description();
    }
}

输出结果为:乔峰会的功夫是龙爪手 降魔掌 降龙十八掌 打狗棒法

【包及访问权限】

技术分享
前面基本将面向对象的知识点讲得七七八八了,现在讲一点特殊的【包】概念。

包是类的特殊性质,包是用来管理大量的类文件,可以设置他人对类成员的访问权。包可以理解为一个更大的、管理类的类(有点拗口)。。。

还是举个栗子你就懂了:

进入武侠世界,武林也是很大的,林子大了什么鸟都有,有可能两个门派的名字是一模一样的,如果这种情况发生在举行天下第一武道会时,很容易撞车,当你看见两个名字一样的门派时,不知你会作何感想。

比如,伟大的少林就分裂成了好几个,如果他们出去都说自己是少林的,很容易引起混淆,让江湖同道感到儿戏,所以,在北边的少林称自己为北少林,在南边的少林称自己为南少林。

包在程序里很大的作用就是在你使用多个类或接口时,为了避免名称重复而采用的一种措施,用package关键字,声明一个包,用包来区分同名的类和接口。

门派 少林(北边)
{
    对外宣传()
    {
        我是少林派;
    }
}

门派 少林(南边)
{
    对外宣传()
    {
        我是少林派;
    }
}

在武林大会时,遇到这种情况,就会Duang,闪退。。。

如果在前面加了区域(package关键字),就可以将两个门派(类)区分开:

区域 北边;
门派 少林
{
    对外宣传()
    {
        我是少林派;
    }
}

区域 南边;
门派 少林
{
    对外宣传()
    {
        我是少林派;
    }
}

--------------

代码是这样子的:

package.north.java;//声明区域

class ShaoLin
{
    public String talk()
    {
        return "我是少林派";
    }
}

package.south.java;//声明区域

class ShaoLin
{
    public String talk()
    {
        return "我是少林派";
    }
}

这样子,两个少林派就可以区分了,是不是很神奇??

注意事项

1 声明包会用到关键字package关键字

2 使用不同的包,会用到关键字import(就是进口的意思)


(华丽丽的分界线)

好了,通过几篇文章,已经把Java讲完了,让我们来回顾一下:

78 PM撸代码之Android【1小时学会Java】:这一篇讲的是基本的Java语法

79 PM撸代码之Android【武侠篇:面向对象基础】:这一篇简述了一下面向过程和面向对象,同时介绍了面向对象的重要知识——类和对象

80 PM撸代码之Android【武侠讲封装、继承、多态】: 这一篇主要讲了面向对象的三个特性——封装、继承、多态

82 PM撸代码之Android【绝顶高手排行榜】:这一篇讲了抽象类、非常重要的接口、包的相关知识

开发Android所需要的Java基本知识就差不多学完了,还有一些比较零碎的知识,它们也挺有用的,但大家可以在学习开发Android的过程中再补充这些知识,它们是:

匿名对象、构造方法、异常处理、关键字(this、static、super、final)、String和StringBuffer等

边学边补,是一个比较理想的状态,^^_ 哎呀,嘴都笑歪了。。。应该是酱紫的^_^。。。

下一篇就可以正式开始勾搭Android了,谢谢大家的支持!

技术分享

Glen是谁?

我是来自中山大学的一只0岁产品经理,俗称PM0。即将走出校园,分享面经、产品、数据、读书笔记、互联江湖,愿你与我在产品的道路上一起成长,共勉!

90后自媒体联盟

JiGlen
90后自媒体联盟是一个汇聚BAT等互联网新进从业者的组织,目前以微信群形式运营,这里有各位大神,热心创作和分享自身的产品干货和心路历程,交流自媒体运营和创作经验,内有人人都是产品经理、互联网er的早读课等社区的老大蹲点发现优秀文章。
如果你有兴趣加入我们,可以关注我的公众号JiGlen,说明你运营的公众号或其他博客,审核通过后,会拉你入群。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。