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,说明你运营的公众号或其他博客,审核通过后,会拉你入群。

时间: 2024-08-05 13:15:31

PM撸代码之Android【绝顶高手排行榜】的相关文章

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

80 PM撸代码之Android[武侠篇:封装.继承.多态] 这是Android系列的第六篇文章,在之前的一篇文章中,已经了解了面向对象的基础概念,这一篇将会通过武侠江湖的类比,讲解面向对象的更多内容,感谢小伙伴们一直以来的支持. 武林门派的三个特征 1 独门秘籍(封装) 2 传承的门派(继承) 3 看情况使功夫和换个姿势说明问题(多态) [封装] 1 门派独门秘籍(封装) 前一篇已经说到,当达摩上了嵩山以后,江湖就正式进入门派时代.每个门派区别于其他门派,肯定是因为这个门派拥有独门武功秘籍.举

Android数据库高手秘籍(三)——使用LitePal升级表

在上一篇文章中,我们学习了LitePal的基本用法,体验了使用框架来进行创建表操作的便利.然而大家都知道,创建表只是数据库操作中最基本的一 步而已,我们在一开始创建的表结构,随着需求的变更,到了后期是极有可能需要修改的.因此,升级表的操作对于任何一个项目也是至关重要的,那么今天我们就 一起来学习一下,在Android传统开发当中升级表的方式,以及使用LitePal来进行升级表操作的用法.如果你还没有看过前一篇文章,建议先去参考 一下 Android数据库高手秘籍(二)——创建表和LitePal的

Android数据库高手秘籍(五)——LitePal的存储操作

经过前面几篇文章的学习,我们已经把LitePal的表管理模块的功能都很好地掌握了,相信大家都已经体会到了使用LitePal来创建表.升级 表.以及建立表关联所带来的便利.那么从本篇文章开始,我们将进入到一个新模块的学习旅程当中,使用LitePal来进行表的CRUD操作.还没有看过前 一篇文章的朋友建议先去参考 Android数据库高手秘籍(四)——使用LitePal建立表关联 . LitePal提供的CRUD操作的API还是颇为丰富的,一篇文章肯定是介绍不全的,因此这里我们仍然是分几篇文章进行讲

Android数据库高手秘籍(二)——创建表和LitePal的基本用法

文章中我们学习了一些Android数据库相关的基础知识,和几个颇为有用的SQLite命令,都是直接在命令行操作的.但是我们都知道,数据库是 要和程序结合在一起使用的,单独对一个数据库去进行増删改查操作并没有什么意义,因此今天我们就来学习一下如何在Android程序当中去操作 SQLite数据库,还没看过前一篇文章的朋友可以先去参考 Android数据库高手秘籍(一)——SQLite命令 . 操作数据库的第一步当然是创建表了,传统创建表的方法相信大多数人都知道,那么今天我除了会展示传统的建表方法之

Android数据库高手秘籍(七)——体验LitePal的查询艺术

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/40153833 经过了多篇文章的学习,我们已经把LitePal中的绝大部分内容都掌握了.现在回想起来了,增删改查四种操作中的前三种我们都已经学完了,不知道现在使用起数据库来,你有没有感觉到格外的轻松和简单.但是呢,我们都知道,在所有的数据库操作当中,查询操作肯定是最复杂的,用法也是最多的,因此LitePal在查询方面提供的API也是比较丰富,而且LitePal在查询方面的API设计

Android数据库高手秘籍(四)——使用LitePal建立表关联

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/39207945 目前我们已经对LitePal的用法有了一定了解,学会了使用LitePal来创建表和升级表的方式,那么今天就让我们一起继续进阶,探究一下如何使用LitePal来建立表与表之间的关联关系.还没有看过前一篇文章的朋友建议先去参考 Android数据库高手秘籍(三)--使用LitePal升级表 . LitePal的项目地址是:https://github.com/LiteP

转载-Android数据库高手秘籍(一)——SQLite命令

原文地址: http://blog.csdn.net/guolin_blog/article/details/38461239 Android数据库高手秘籍(一)——SQLite命令 分类: Android数据库高手秘籍2014-09-04 09:10 7310人阅读 评论(42) 收藏 举报 Android数据库SQLite高手秘籍LitePal 转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/38461239 要想熟练地操作任

Android数据库高手秘籍(八)——使用LitePal的聚合函数

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/40614197 在上一篇文章当中,我们已经把LitePal查询操作的所有用法都学习完了,很显然,LitePal帮我们提供了非常强大的查询API,使得我们可以极度轻松地完成各种类型的查询.但是呢,在SQL语句当中,有一种查询是比较特殊的,就是聚合函数查询,它不像传统查询一样是将表中的某些列的数据查询出来,而是将查询结果进行聚合和统计,最终将统计后的结果进行返回.因此,任何一个关系型数

Android数据库高手秘籍(二):创建表和LitePal的基本用法

上一篇文章中我们学习了一些Android数据库相关的基础知识,和几个颇为有用的SQLite命令,都是直接在命令行操作的.但是我们都知道,数据库是要和程序结合在一起使用的,单独对一个数据库去进行増删改查操作并没有什么意义,因此今天我们就来学习一下如何在Android程序当中去操作SQLite数据库,还没看过前一篇文章的朋友可以先去参考Android数据库高手秘籍(一)--SQLite命令 . 操作数据库的第一步当然是创建表了,传统创建表的方法相信大多数人都知道,那么今天我除了会展示传统的建表方法之