继承只是个开始,要使用多态,还需要接口(这里的接口不是GUI的I代表的接口)。

一、抽象类

1 不该初始化的类

有些类不应该被初始化,即不能”new“出来,如Animal类对象是什么样?

一定要有Animal类继承和产生多态,但要限制只有它的子类才能被初始化。

通过标记类为抽象类,即可告知编译器该类不能创建任何类型的实例。

2 抽象类

抽象类除被继承,是没有用途、没有值、没有目的;

在类的声明的前面加上抽象类关键词abstract;

如下,将Canine类声明为抽象类;

abstract public class Canine extends Animal{public void roam(){  }
}public class MakeCanine{public void go(){Canine c;c = new Dog();      // 将子类对象赋值给父类的引用c = new Canine();  // 因为Canine是抽象类,因此无法实例化,编译不通过c.roam();}
}

注意:具体类指不是抽象的类;

3 抽象方法

除类,还可将方法标记为abstract;

抽象的类代表此类必须被extends过,抽象的方法代表此方法必须被覆盖过;

抽象的方法没有实体,直接以分号结束;

public abstract void eat();

声明一个抽象方法,必须将类也标记为抽象类,即不能在非抽象类中拥有抽象方法,但抽象类中可有抽象和非抽象的方法;

在继承树结构下的第一个具体类必须实现所有的抽象方法,也可通过抽象机制将实现的任务交给下层;

4 Object类

在Java中所有类都是Object类直接或间接继承的子类;

编译器通过引用类型来判断有哪些方法可被调用,不是通过对象实际的类型,因此只能在引用变量的类确实有该方法才能调用它;

从ArrayList<Object>取出的对象只能被Object引用,不然就要用类型转换来改变;

Object引用变量在没有类型转换情况下,不能赋值给其他类型,若堆上的对象类型与所要转换的类型不兼容,则次转换会在执行期间产生异常;

二、接口

1 多重继承问题

Java不允许多重继承,因为会有致命方块的问题;

2 接口概念

接口就像100%纯天然抽象类,所有接口的方法都是抽象的;

3 接口定义

使用interface代替class来声明接口,且接口的方法一定是抽象的;

public interface Pet{public abstract void play();
}

4 接口实现

必须在实现接口的同时,实现接口的所有方法;

public class Dog extends Canine implements Pet{public void play(){// ...}
}

extends只能有一个,implements可以有多个;

public class Dog extends Animal implements Pet, Saveable, Paintable{// ...
}

HeadFirstJava——8_接口与抽象类相关推荐

  1. 深入理解Java的接口和抽象类

    http://www.cnblogs.com/dolphin0520/p/3811437.html 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口 ...

  2. 接口与抽象类的使用选择

    为什么有的地方必须使用接口而不是抽象类,而在另一些地方,又必须使用抽象类而不是接口呢?或者说,在考虑Java类的一般化问题时,很多人会在接口和抽象类之间犹豫不决,甚至随便选择一种. 首先来了解一下接口 ...

  3. 选择Java接口还是抽象类

    很多人有过这样的疑问:为什么有的地方必须使用接口而不是抽象类,而在另一些地方,又必须使用抽象类而不是接口呢?或者说,在考虑Java类的一般化问题时,很多人会在接口和抽象类之间犹豫不决,甚至随便选择一种 ...

  4. 有关接口和抽象类的问题

    1. 一个子类如果implements一个接口,就必须实现接口中的所有方法(不管是否需要):如果是继承一个抽象类,只需要实现需要的方法即可,这是抽象类的一个优点 2. 如果一个接口中定义的方法名改变了 ...

  5. JavaSE学习总结(六)——接口、抽象类、内部类

    一.不需要实例化的原因 看一个示例: package com.zhangguo.chapter5.s1;/**动物园*/ public class Zoo {public static void ma ...

  6. 接口或抽象类:使用哪一个?

    本文翻译自:Interface or an Abstract Class: which one to use? Please explain when I should use a PHP inter ...

  7. java 接口与抽象类的区别

    1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...

  8. 【Kotlin】Kotlin 抽象类与接口 ( 接口声明 | 接口实现 | 抽象类声明与实现 )

    文章目录 I . Kotlin 接口定义与实现 II . Kotlin 抽象类定义 III . Kotlin 类继承抽象类并实现接口 IV . Kotlin 接口与抽象类子类测试 I . Kotlin ...

  9. 接口类抽象类 封装

      接口类抽象类: 第一版,不好,没有统一化设计,第二版解决. class QQ:def pay(self,money):print('您用qq支付了%s元' % money)class Ali:de ...

  10. 第18条:接口优于抽象类

    为什么80%的码农都做不了架构师?>>>    1.内容导向 本条内容的主要重点--骨架类,集成接口和抽象类的优点于一身. 2.接口的优点 现有的类可以很容易的被更新,以实现新的接口 ...

最新文章

  1. Linux Ubuntu从零开始部署web环境及项目 -----tomcat+jdk+mysql (二)
  2. Julia程序设计3 数组1 创建、初始化、属性与访问
  3. 医院的“数据中心”,究竟应该怎么建?
  4. 【HDU 1276】士兵队列训练问题(两个队列模拟)
  5. LUA: lua基础.
  6. 个推应用统计产品(个数)Android集成实践
  7. android 默认浏览器 视频播放 二维码,Android调用系统默认浏览器访问的方法
  8. 了解与防御XSS攻击
  9. 组态王调用mysql存储过程_组态王与数据库通讯
  10. android画布原理,Android触摸事件如何实现笔触画布详解
  11. C++程序设计谭浩强 全部习题答案
  12. cluster(1)
  13. 请珍惜你身边那个默默爱你的人
  14. pandas 数据读取与保存
  15. 浏览器页签icon图标的设置和获取
  16. 《致盛夏的七封情书》 ------------ 第一篇《晨曦》
  17. 三维坐标变换——旋转矩阵与旋转向量
  18. Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.dataformat.yaml.YAMLFactory的解决方法
  19. php 高德地图点击事件,javascript - 高德地图marker动态绑定点击问题
  20. C语言数据类型和表达式

热门文章

  1. ubuntu 的 kitti2bag安装与测试
  2. 【LeetCode】每日一题(十一)面试题46. 把数字翻译成字符串 动态规划+滚动数组优化 / 递归
  3. 冲着名为Sundy的男人去麦子学院
  4. 麦子学院与阿里云战略合作 在线教育领军者技术实力被认可
  5. JavaWeb项目分层结构
  6. sql2008计算机环境,win2008r2下安装sql2008r2初版
  7. 笔记本安装黑苹果后无法调节亮度的解决办法 | 小太阳
  8. Python+Django+Hadmin的初级使用V1.0
  9. django创建模板报错:TemplateDoesNotExist at
  10. fusion360界面字体模糊处理方法