Java--内部类概念

一. 内部类的概念

  内部类的定义:一个类的定义放在另一个类的内部 内部类作为外部类的一个成员,依附于外部类而存在的

  内部类:一个独立的类,生成独立的class文件,文件名格式为:外部类类名·$内部类名


二.内部类的种类

        四种类型的内部类:成员内部类,方法内部类,匿名内部类,静态内部类

            1.成员内部类 : 在一个包含类中定义的不使用静态修饰符的类型,与成员变量、方法同一个层次,可以访问包含类所有
                                           的成员,在包含类中创建成员内部类实例的语法 this.new innerclass();  在包含类外创建成员内部类实

                                           例的语法。(new Outerclass()).new Innerclass();  未创建外围对象之前不可能创建内部类的对象。

                            

            2.方法内部类: 定义在方法体中的类,该内部类只能在方法内进行实例化,不可以在此方法外对其实例化

                                  使用最少的内部类形式,如同局部变量的定义,不允许有访问修饰符。

          3.静态内部类:不能与包含类同名, 创建静态内部类实例的语法:

                                                Outer.Inner inner = new Outer.Inner();

                                  若public修辞该内部类,则该内部类可以被其他类继承

                        

          4. 匿名内部类:只用到类的一个实例 类在定义后马上用到

              *匿名内部类不能有构造方法。
              *匿名内部类不能定义任何静态成员、静态方法
              *匿名内部类不能是public,protected,private,static
              *只能创建匿名内部类的一个实例

              *一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个抽象类或一个类

示例:

   

  1. //抽象类
  2. abstract class Person {  
  3.     public abstract void showCareer();  
  4. }  

  5. //抽象类的实现-----即正常类
  6. public class Teacher extends Person{  
  7.     @Override  
  8.     public void showCareer() {  
  9.         System.out.println("Career is Teacher");  
  10.     }  
  11. }  

  12. //接口
  13. public interface Tree {  
  14.     void showTreeName();  
  15. }  
  16.     
  17. public class AnonymousInnerClass {  
  18.   
  19.     public static void main(String[] args) {  
  20.         System.out.println("################# 常规");  
  21.         normal();  
  22.         System.out.println("################# 覆盖父类方法");  
  23.         extendsInner();  
  24.         System.out.println("################# 抽象类");  
  25.         abstractInner();  
  26.         System.out.println("################# 接口");  
  27.         interfaceInner();  
  28.     }  

  29. //覆盖父类方法( 匿名内部类  正常类 的实现 )
  30.     private static void extendsInner() {  
  31.         Person person = new Teacher() {  
  32.             @Override  
  33.             public void showCareer() {  
  34.                 System.out.println("Career is Worker");  
  35.             }  
  36.         };  
  37.         person.showCareer();  
  38.     }  
  39.   
  40.   
  41. //匿名内部类 抽象类 实现  
  42.     public static void abstractInner() {  
  43.         Person person = new Person() {  
  44.             @Override  
  45.             public void showCareer() {  
  46.                 System.out.println("Career is lawyer");  
  47.             }  
  48.         };  
  49.   
  50.         person.showCareer();  
  51.     }  
  52.   
  53. //匿名内部类 接口 实现  
  54.     public static void interfaceInner() {  
  55.         Tree tree = new Tree() {  
  56.             public void showTreeName() {  
  57.                 System.out.println("This is Apple Tree");  
  58.             }  
  59.         };  
  60.         tree.showTreeName();  
  61.     }  
  62. }  

猜你喜欢

转载自blog.csdn.net/weixin_39609623/article/details/80742413