抽象类、接口、多态都是面向对象中很基础的东西,我相信看到能本篇博客的人本不会再纠结它的基本定义了,本篇文章将尽量的更加深层次的挖掘其内涵,希望能对大家有帮助。

一、抽象类

  1、形式

 abstract class Ceshi
{
abstract void show();
}
class DemoA extends Ceshi
{
void show()
{
System.out.print("Hello world");
}
}

  2、特点

    a、抽象类不可以被实例化

    b、抽象类必须有其子类覆盖了所有抽象方法后,该子类才可以实例化,否则,该子类还是抽象类。

    c、抽象方法必须定义在抽象类中,该类必须也被abstract修饰。

  3、那么问题来了

    a、抽象类有构造函数吗?

      有,用于给子类实例化。

    b、抽象类可以不定义抽象方法吗?

      事实上是可以的,但是很少见。

    c、抽象类和一般类的异同点。
      相同点:
        抽象类和一般类都是用来描述事物的,都在内部定了成员。
      不同点:
        1,一般类有足够的信息描述事物。抽象类描述事物的信息有可能不足。
        2,一般类中不能定义抽象方法,只能定非抽象方法。抽象类中可定义抽象方法,同时也可以定义非抽象方法。
        3,一般类可以被实例化。抽象类不可以被实例化。

二、接口

  从某种意义上说,接口是一种特殊形式的抽象类,在java语言中抽象类表示的是一种继承关系,一个类只能继承继承一个抽象类,而一个类却可以实现多个接口。

我们都知道接口的定义方式是

interface Demo
{
void show();
}

其实对于接口当中常见的成员:而且这些成员都有固定的修饰符。
 a、全局常量: public static final

b、抽象方法:public abstract

1、由此得出结论,接口中的成员都是公共的权限。即全写是

interface Demo
{
public static final int num = 4;
public abstract void showa();
}

2、接口特点

  a、接口是对外暴露的规则,是程序功能的扩展。

  b、接口降低了耦合性。

  c、一个类可以实现多个接口

    

abstract class Test2 extends Q implements A,Z
{
}

3、接口与抽象类异同点

  相同点:
    都是不断向上抽取而来的。

  不同点:

    1,抽象类需要被继承,而且只能单继承。接口需要被实现,而且可以多实现。

    2,抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。接口中只能定义抽象方法,必须由子类去实现。

三、多态

  一个对象有不同的形态,这就是多态。

  比如 动物 ani = new 狗();

  这就是多态在代码中的体现:父类引用指向子类对象。

1、多态好处与弊端

  多态的好处:提高了代码的扩展性,前期定义的代码可以使用后期的内容。

  多态的弊端:前期定义的内容不能使用(调用)后期子类的特有内容。

2、向下转型

动物 ani = new Cat();
Cat c = (Cat)ani;

3、内部类

  内部类是我们以前建的比较少的,其实就是类里面有类。

class Outer//外部类
{
class Inner// 内部类。
{
}
}

  a、内部类如何引用外部类?

  内部类持有了外部类的引用。  外部类名.this。

class Outer
{
int num = 3;
class Inner
{
int num = 4;
void show()
{
int num = 5;
System.out.println(Outer.this.num);
}
}
void method()
{
new Inner().show();
}
}

3、内部类可以存放在局部位置上,且在局部位置上只能访问局部中被final修饰的局部变量。

class Outer
{
void method()
{
final int x = 9;
class Inner
{
public String toString()
{
}
}
}
}

4、匿名内部类

匿名内部类是内部类的一种简写形式,其实就是一个匿名子对象。

    public void method()
{
new Demo()//匿名内部类。
{
void show()
{
System.out.println("show:"+num);
}
}.show();
}

四、最后

抽象类、接口和多态虽然简单,但是常用,尤其像是内部类、匿名内部类这些我们以前接触较少,更应该重点掌握。

详解java基础--抽象类、接口与多态的更多相关文章

  1. java基础(11):接口、多态

    1. 接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成. ...

  2. 第十八节:详解Java抽象类和接口的区别

    前言 对于面向对象编程来说,抽象是它的特征之一. 在Java中,实现抽象的机制分两种,一为抽象类,二为接口. 抽象类为abstract class,接口为Interface. 今天来学习一下Java中 ...

  3. java基础(十五)----- Java 最全异常详解 ——Java高级开发必须懂的

    本文将详解java中的异常和异常处理机制 异常简介 什么是异常? 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常. Java异常的分类和类结构图 1.Java中的所 ...

  4. 「跬步千里」详解 Java 内存模型与原子性、可见性、有序性

    文题 "跬步千里" 主要是为了凸显这篇文章的基础性与重要性(狗头),并发编程这块的知识也确实主要围绕着 JMM 和三大性质来展开. 全文脉络如下: 1)为什么要学习并发编程? 2) ...

  5. Protocol Buffer技术详解(Java实例)

    Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...

  6. 详解Java中的clone方法

    详解Java中的clone方法 参考:http://blog.csdn.net/zhangjg_blog/article/details/18369201/ 所谓的复制对象,首先要分配一个和源对象同样 ...

  7. 异常处理器详解 Java多线程异常处理机制 多线程中篇(四)

    在Thread中有异常处理器相关的方法 在ThreadGroup中也有相关的异常处理方法 示例 未检查异常 对于未检查异常,将会直接宕掉,主线程则继续运行,程序会继续运行 在主线程中能不能捕获呢? 我 ...

  8. 第二十九节:Java基础知识-类,多态,Object,数组和字符串

    前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...

  9. Java基础十--接口

    Java基础十--接口 一.接口的定义和实例 /* abstract class AbsDemo { abstract void show1(); abstract void show2(); } 8 ...

随机推荐

  1. JavaScript学习14:表单处理

    什么是表单? 在HTML中,表单是由<form>元素来表示的.而在JavaScript中,表单相应的则是HTMLFormElement类型.HTMLFormElement继承了HTMLEl ...

  2. Codeforces 757 D. Felicity's Big Secret Revealed 状压DP

    D. Felicity's Big Secret Revealed   The gym leaders were fascinated by the evolutions which took pla ...

  3. 常用的Sublime Text插件及安装方法

    Package Control 功能:安装包管理 简介:sublime插件控制台,提供添加.删除.禁用.查找插件等功能 使用:https://sublime.wbond.net/installatio ...

  4. YTU 2844: 改错题A-看电影

    2844: 改错题A-看电影 时间限制: 1 Sec  内存限制: 128 MB 提交: 69  解决: 47 题目描述 注:本题只需要提交标记为修改部分之间的代码,请按照C++方式提交. 小平家长为 ...

  5. HDU - 1863 畅通工程(最小生成树)

    d.m个村庄,n条路,计算出所有村庄畅通需要的最低成本. s.最小生成树 c.Prim算法:cost[a][b]和cost[b][a]都得赋值. /* Prim算法 Prim求MST 耗费矩阵cost ...

  6. JVM从理论到实践

    这里实践不是指动手写JVM,而是动手做实验,结合日常工作相关的部分,理论与实践结合从而对这块知识有更深入的认识. 随着Java10的到来,JVM这块也有不少调整改进,网上大部分内容都是过时或大部分开发 ...

  7. 基于《Hadoop权威指南 第三版》在Windows搭建Hadoop环境及运行第一个例子

    在Windows环境上搭建Hadoop环境需要安装jdk1.7或以上版本.有了jdk之后,就可以进行Hadoop的搭建. 首先下载所需要的包: 1. Hadoop包: hadoop-2.5.2.tar ...

  8. EF 连接MySql

    使用EntityFramework6连接MySql数据库(db first方式) http://www.cnblogs.com/24la/archive/2014/04/03/ef6-mysql.ht ...

  9. bzoj 1565 [NOI2009]植物大战僵尸【tarjan+最大权闭合子图】

    一上来以为是裸的最大权闭合子图,上来就dinic -然后没过样例.不得不说样例还是非常良心的给了一个强连通分量,要不然就WA的生活不能自理了 然后注意到有一种特殊情况:每个植物向他保护的植物连边(包括 ...

  10. Luogu P1330 封锁阳光大学【Dfs】 By cellur925

    题目传送门 这道题我们很容易去想到二分图染色,但是这个题好像又不是一个严格的二分图. 开始的思路:dfs每个点,扫与他相邻的每个点,如果没访问,染相反颜色:如果访问过,进行检查,如果不可行,直接结束程 ...