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

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

今天分享一篇PM撸代码系列Android之【绝顶高手排行榜】



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

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

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

1 抽象类

2 接口

3 包及访问权限


【抽象类】

8c3cb1ff74fb0a57b6a6feb8cb0484ad.jpg

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年一部分的《葵花宝典》,已经厉害成那样,不敢想象他是有多厉害。。。


【接口】

1c0c7bea558b3fe98102d30f3fc51a9f.jpg

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

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

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

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

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

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

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

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

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

我们知道,乔峰最开始是拜师少林的玄苦大师:
师傅 玄苦(少林)
{
    武功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();

   }

}

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


【包及访问权限】

9f193547ad6da84a650375fe77b54ce0.jpg

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

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

还是举个栗子你就懂了:

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

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

包在程序里很大的作用就是在你使用多个类或接口时,为了避免名称重复而采用的一种措施,用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了,谢谢大家的支持!

目录
相关文章
|
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代码
51 3
|
4月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
很多文章都介绍了FTPClient如何连接ftp服务器,但却很少有人说如何连接一台开了SSL认证的ftp服务器,现在代码来了。
117 2
|
5月前
|
存储 Java Android开发
🔥Android开发大神揭秘:从菜鸟到高手,你的代码为何总是慢人一步?💻
【7月更文挑战第28天】在Android开发中,每位开发者都追求极致的用户体验。然而,“代码执行慢”的问题时常困扰着开发者。通过案例分析,我们可探索从新手到高手的成长路径。
43 3
|
4月前
|
Java Android开发
Android项目架构设计问题之要提升代码的可读性和管理性如何解决
Android项目架构设计问题之要提升代码的可读性和管理性如何解决
46 0
|
5月前
|
API Android开发
Android 监听Notification 被清除实例代码
Android 监听Notification 被清除实例代码
|
5月前
|
Web App开发 JavaScript 前端开发
Android端使用WebView注入一段js代码实现js调用android
Android端使用WebView注入一段js代码实现js调用android
140 0
|
6月前
|
存储 算法 Java
Android 进阶——代码插桩必知必会&ASM7字节码操作
Android 进阶——代码插桩必知必会&ASM7字节码操作
297 0