java基础10:抽象类、接口与多态

本文深入探讨面向对象编程中的抽象类、接口与多态概念,分析它们的特点与应用场景,并通过示例代码展示内部类及匿名内部类的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 抽象类、接口、多态都是面向对象中很基础的东西,本篇文章将尽量的更加深层次的挖掘其内涵,希望能对大家有帮助。

 一、抽象类

  1、形式

[java]
  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语言中抽象类表示的是一种继承关系,一个类只能继承继承一个抽象类,而一个类却可以实现多个接口。

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

[java]
  1. interface Demo  
  2. {  
  3.    void show();        
  4. }  


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

 b、抽象方法:public abstract

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

[java]
  1. interface Demo  
  2. {  
  3.     public static final int num = 4;  
  4.     public abstract void showa();  
  5. }  


2、接口特点

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

  b、接口降低了耦合性。

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

[java]
  1.       
  2. abstract class Test2 extends Q implements A,Z  
  3. {  
  4. }  


3、接口与抽象类异同点

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

  不同点:

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

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

    

     接口与抽象类区别:

       1.接口是抽象到极致的抽象类

     2.接口只能有抽象方法

     3.接口可以被实现、也可以被继承

     4.抽象类里既可以有普通方法又有抽象方法

     5.抽象类可以用来被继承

     6.一个类中只要存在抽象方法,它肯定是抽象类,所以抽象类中必须有抽象方法

      

 三、多态

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

  比如 动物 ani = new 狗();

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

1、多态好处与弊端

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

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

2、向下转型

[java]
  1. 动物 ani = new Cat();  
  2. Cat c = (Cat)ani;  


3、内部类

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

[java]
  1. class Outer//外部类  
  2. {  
  3.     class Inner// 内部类。  
  4.     {  
  5.     }     
  6. }   
  7.     

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

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

[java]
  1. class Outer  
  2. {  
  3.     int num = 3;  
  4.     class Inner  
  5.     {  
  6.         int num = 4;  
  7.         void show()  
  8.         {  
  9.             int num = 5;  
  10.             System.out.println(Outer.this.num);  
  11.         }  
  12.     }  
  13.     void method()  
  14.     {  
  15.         new Inner().show();  
  16.     }  
  17. }  
  18.    


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

[java]
  1. class Outer  
  2. {  
  3.     void method()  
  4.     {  
  5.         final int x = 9;  
  6.         class Inner  
  7.         {  
  8.             public String toString()  
  9.             {  
  10.             }  
  11.         }  
  12.     }  
  13. }  
  14.    


4、匿名内部类

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

[java]
  1. public void method()  
  2. {  
  3.     new Demo()//匿名内部类。  
  4.     {  
  5.         void show()  
  6.         {  
  7.             System.out.println("show:"+num);  
  8.         }  
  9.     }.show();  
  10. }  


 四、最后

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值