内部类

内部类

概念:在一个类内部再定义一个完整的类。

特点:内部类在编译之后能够生成独立于外部类的字节码class文件。

内部类可以直接访问外部类的私有成员,而不破坏其封装。

内部类可以帮外部类实现一些功能。

1.成员内部类

innclass类:

package com.tiedandan.java常用类;

import java.sql.SQLOutput;

public class innerclass {
   private int id=1;
   private  String name="张铁蛋";

   public static void main(String[] args) {
       innerclass inner1 = new innerclass();//创建外部类对象
       innerclass.inner f1 = inner1.new inner();//内部类对象的创建必须在外部类创建对象之后才可以创建。
       inner f2 = inner1.new inner();//innerclass可写可不写
       inner f3 = new innerclass().new inner();//可以把一二两步结合起来,一步完成内部对象创建。
       f1.print();
       test test0 = new test();
      test0.test1();

  }
   public  class  inner{

//       private static String countrey ="China";成员内部类中不能定义内部成员,但是能定义内部常量
       private  static final  String country ="中国";
       private  String name ="铁蛋蛋";
       public  void print(){

   System.out.println(id);
   System.out.println(name);//当外部类属性和内部类相同时,会优先访问内部类属性
   System.out.println(innerclass.this.name);//除非你在属性的名字前加上类的名字和this关键字(平时都被省略)。
}
  }
}

测试类:

package com.tiedandan.java常用类;

public class test {
   public static void test1(){
       System.out.println("gogogo");
  }
}

2.静态内部类

staticinnerclass类:

package com.tiedandan.java常用类.静态内部类;

import javax.naming.Name;

public class staticinnerclass {
   private int id;
   private  String name="张铁蛋";

   //静态内部类和外部类的用法一样,可以给外部类提供功能。
   //只有静态内部类可以被static修饰,正常类不能被static修饰。
   static class inner{
           private String name="铁蛋蛋";
           private  String adress="翻斗花园";
           public void print(){
               //静态内部类调用属性和外部类一样
               System.out.println(name);
               System.out.println(adress);
               System.out.println("我是静态内部类的输出方法");
          }
           public  static  void  print2(){
               //静态内部类的静态方法可以在内部类对象实例化后调用,和外部类调用其他类静态方法的方式一样。
               System.out.println("我是静态内部类的静态输出方法");
          }

  }
}

Test类:

package com.tiedandan.java常用类.静态内部类;

public class Test {
   public static void main(String[] args) {
       //静态内部类的创建对象和普通类大致相同,不必再创建外部类对象,只要在内部类前面加上外部类的名称即可。
       staticinnerclass.inner in1=new staticinnerclass.inner();
       in1.print();
       in1.print2();//调用静态内部类的静态方法,和调用外部类的静态方法一样。
  }
}

3.局部内部类

partinnerclass类:

package com.tiedandan.java常用类.局部内部类;

import java.security.PrivateKey;

public class partinnerclass {
   private int id =0;
   private String name;

   public void show(){
       //定义局部内部类变量
       final  String email1;//
       //局部内部类访问外部类的当前方法时,因为局部变量生命周期短,执行一次就会消失,所以要用fianl修饰。
       String email2;//jdk1.8新特性,局部变量必须是常量final,所以不写final也行。

       //局部内部类写在类的方法当中,等级和包含他的方法相同,适用范围在show方法里面。
       //局部内部类仍然遵循内部类的规则
       //内部类前面可以加修饰符,但是局部内部类不能加任何修饰符
       class inner1{
           //局部内部类属性
           private int id= 1;
           private  String adress="翻斗花园";
           public void show1(){
               System.out.println("这是局部内部类的方法:");
               System.out.println("这是局部内部类的id:"+id);
               System.out.println("这是局部内部类的adress:"+adress);
               System.out.println("这是外部类的id:"+partinnerclass.this.id);

          }
      }
       inner1 inner = new inner1();//局部内部类使用前要先创建局部内部类对象,而且创建对象的位置要在局部内部类下面。
       inner.show1();

  }

}

Test类:

package com.tiedandan.java常用类.局部内部类;

public class Test {
   public static void main(String[] args) {
       partinnerclass part1 = new partinnerclass();
       part1.show();
  }
}

4.匿名内部类

没有类名的局部内部类,一切特征和局部内部类相同

必须继承一个父类或者实现一个接口

定义类,实现类,创建对象的语法合并

,只能创建一个该类的对象。

优点:减少代码量。

缺点:可读性差。

posted on 2021-11-14 19:41  张铁蛋666  阅读(285)  评论(0编辑  收藏  举报

导航