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

     四、最后

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

  • 相关阅读:
    cad 画图面板的尺寸大小定义
    CAD中如何将图形按一定的比例放大或缩小
    数组模拟栈和队列
    41. 缺失的第一个正数
    98. 验证二叉搜索树
    1220. 统计元音字母序列的数目
    网络编程--select模型(总结)
    网络编程--C/S模型(总结)
    C++内存管理(堆栈内存的区别、==和equal的区别)
    condition_variable-介绍和使用
  • 原文地址:https://www.cnblogs.com/jinfulin/p/4098971.html
Copyright © 2020-2023  润新知