详解java基础--抽象类、接口与多态

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

一、抽象类

  1、形式

 1 abstract class Ceshi
 2 {
 3     abstract void show();
 4 }
 5 class DemoA extends Ceshi
 6 {
 7     void show()
 8     {
 9         System.out.print("Hello world");
10     }
11 }

  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();
    }

四、最后

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

时间: 2024-12-23 10:17:47

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

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

1. 接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义与实现分离,优化了程序设计. 请记住:一切事物均有功能,即一切事物均有接口. 1.2 接口的定义 与定义类的class不同,接口定义时需要使用interface关键字. 定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件.这

详解Java中抽象类与接口的区别

在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意.其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解.对于设计意图的理解是否正确.合理.本

牛刀小试 - 详解Java中的接口与内部类的使用

一.接口 接口的理解 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现: 也就是说,接口自身自提供方法的基本声明,而不提供方法体:接口中声明的方法只能被实现该接口的子类所具体实现. 接口是Java中另一种非常重要的结构.因为Java不支持多继承,某种程度来说这也造成了一定的局限性. 所以接口允许多实现的特点弥补了类不能多继承的缺点.通常通过继承和接口的双重设计,可以既保持类的数据安全也变相实现了多继承. 接口的特点 使用关键字"interface&quo

详解java基础--多线程

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 如果一次只完成一个事情,还是比较容易实现的,但事实上很多事情都是同时执行的,java为了模拟这种状态,引入了线程机制. 当程序同时完成多个事情时,就是所谓的多线程程序. 在一个时刻,单核的cpu只能运行一个程序.而我们看到的同时运行效果,只是cpu在多个进程间做着快速的随机切换动作. 所以说多线程解决了多部分同时运行的问题,但是线程太多的话肯定会影响效率. 首先老规矩一张图来展现我们本次要介绍

详解Java基础--异常

经常写程序的人对try...catch...finally语句肯定是不陌生的了.但是好多人总对异常搞不太清楚,不知道这个异常什么意思,不知道为什么用这个异常处理,这篇博客为大家从本质上剖析一下java中的异常处理的工作原理. 一.定义 在<java编程思想>中这样定义异常:阻止当前方法或作用域继续执行的问题. 这是书面上的语言,翻译成我们自己的语言其实就是程序运行出现了问题.具体一点说就是程序运行出现了问题,可能会导致程序运行机制.所以就要通过抛出异常的方式告诉开发者哪里出现了问题. 二.异常

Java基础10 接口的继承与抽象类(转载)

接口继承 接口继承(inheritance)与类继承很类似,就是以被继承的interface为基础,增添新增的接口方法原型.比如,我们以Cup作为原interface: interface Cup{    void addWater(int w);    void drinkWater(int w);} 我们在继承Cup的基础上,定义一个新的有刻度的杯子的接口,MetricCup 接口如下: interface MetricCup extends Cup{    int WaterContent

Protocol Buffer技术详解(Java实例)

Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发团队中目前主要使用的开发语言就是C++.Java和Python,其中Python主要用于编写各种工具程序.然而为了保证该篇Blog的完整性和独立性,我仍然会将上一篇Blog中已经出现的内容再一次赘述,同时对于Java中特有的部分也会着重介绍.          一.生成目标语言代码.      下面

详解Java解析XML的四种方法

(1)DOM解析 DOM是html和xml的应用程序接口(API),以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取 和操作文档的任意部分,是W3C的官方标准 [优点] ①允许应用程序对数据和结构做出更改. ②访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据. [缺点] ①通常需要加载整个XML文档来构造层次结构,消耗资源大. [解析详解] ①构建Document对象: DocumentBuilderFactory dbf = DocumentBu

Java基础十--接口

Java基础十--接口 一.接口的定义和实例 1 /* 2 abstract class AbsDemo 3 { 4 abstract void show1(); 5 abstract void show2(); 6 } 7 8 当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用 9 另一种形式定义和表示,就是 接口 interface. 10 */ 11 12 //定义接口使用的关键字不是class,是interface. 13 //interface编译后还是.class文件,其实本质