聊聊继承、多态和抽象

想了很久,简书的第一篇文章写些什么好,自己是个技术小白,讲不了什么高深的技术,那就来聊聊我所认知的一些JAVA技术知识。

继承


Java是面向对象程序设计语言。(什么是面向对象,在这里就不唠叨了),而Java程序是什么?就是通过继承、组合对象形成的一套问题解决方案。通过继承可以纵观JAVA语言的所有特性。
继承是面向对象编程技术的基石(将复杂问题简单化)。也是后面所要讲的多态和抽象的前提。通俗来讲,继承是一个对象从另一个对象获取属性的过程(除了private属性以外),类之间就形成了所谓的等级关系。
继承有以下几个特点:

  • 单一继承(解决了谁是“母亲”的问题)
  • IS-A问题(解决了继承和组合的问题)
  • Java所有类都隐式继承Object基类;
  • extends 与 Implement关键词

多态


什么是多态?同一种行为具有不同表现形态或者形式的能力这是官方的解释,听起来一头雾水。我的理解是:多态是对象的多种表现形式,即向上转型。
多态的前提是:

  • 继承
  • 动态绑定

有人问什么是动态绑定,《Java编程思想》给出这样的解释:

在在运行时根据对象的类型进行绑定,而与之相反的是前期绑定,编译时就确定类型。>

有人又问,Java不是动态编程语言,怎么实现动态绑定呢?这是Java语言的一个特点——反射机制(后续更新文章会讲述)

看栗子:

public class Animal{
    public Animal(){
    }
    public void move(){
        System.out.println("Animal move");
    }
}

public class Dog extends Animal{
      public String name;
      public Dog(String name){
            this.name=name;
      }
      public void move(){
           System.out.println(name+"move");
      }
      public void eat(){
            System.out.println(name+"eat");
      }
}
public class Test{
    public static void main(String[] args){
          Animal dog1=new Dog("dog1");
          dog1.move();
          //dog1.eat();错误
          Dog dog2=new Dog("dog2");
          dog2.move();
          dog2.eat();
    }
}

执行以上程序,输出结果为:
dog1.move;
dog2.move;
dog2.eat;

  • 为什么Animal对象 dog1 输出的是dog1.move,而不是Animal.move,这是因为JAVA语言在运行的时候才确定dog1所指向的对象是Dog,Dog向上转型为Animal

  • dog1引用依旧是Animal,Animal是没有eat()方法的,所以dog1.eat()无法调用。记得前面继承所讲的么,dog1 IS-A Animal,但Animal is not a Dog。

抽象


抽象类,我的理解是,无法创建具体对象的类是抽象类,抽象类只是一个特殊的类,既然是JAVA中的类,那么就具有其所有的特点:继承、多态、重写重载等;

作用:

  • 逻辑接口与实现分离,结构化;
  • 完全解耦,向上转型;

应用:

  • 适配器设计模式;
  • 工厂设计模式;

特点:

  • 包含着abstract 方法的类都是抽象类,抽象类用abstract 来修饰
  • 因为抽象类不能实例化,所以必须被继承;
  • 接口是极度抽象化的类;
  • 任何子类必须重写父类的抽象方法;
    详情:
  • 详情请看《Java编程思想》
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • 一.成员变量与局部变量的区别 成员变量:在类中定义,用来描述对象将要有什么(属性)。可被本类方法和其他跟当前类有关...
    jeffierw阅读 551评论 0 0
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,055评论 0 4
  • 你很清楚的知道什么时候用抽象类,什么时候用接口么?p.s. 多文字预警! 1 抽象类和接口简介 1.1 抽象类 ...
    Sharember阅读 2,351评论 9 55
  • 2013年的大年初一,我第一次去甘肃,从飞机的窗口看下去,是满眼万仞沟壑的黄土地,作为南方人,第一眼着实吓了我一跳...
    Alice_cyy阅读 227评论 0 0
  • 富兰克林认为一个人必须具有的美德: 1.节制。食不过饱,饮不过量。 2.寡言。言必益于人或益于己;避免无益的闲聊。...
    一1一1一1一1一阅读 1,424评论 0 1