Java内部类

本文介绍了Java中的内部类,包括实例化的两种方式、重名访问的细节,以及静态内部类、局部内部类和匿名内部类的特点和用法。内部类可以直接访问外部类的私有成员,静态内部类可以独立实例化,局部内部类和匿名内部类有特定的作用域限制。
摘要由CSDN通过智能技术生成

 内部类

一.实例化

特点:1.编译之后可生成独立的字节码文件

           2.内部类可直接访问外部类的私有成员,且不破坏封装

package TestOfInnerClass;

import TestOfInnerClass.Body.Inner;

public class Practice01 {
    public static void main(String[] args) {
        //1.
//        Body body = new Body();
//        Body.Inner inner = body.new Inner();
//        inner.show_Basic();
        //2.
        Inner inner = new Body().new Inner();
        inner.show_Basic();
    }
}
package TestOfInnerClass;

public class Body {
     private String name = "Mikes";
     private int age = 19;
     class Inner{
         private String address = "Jinagxi";
         private String phone = "239****3258";
         private String name = "Jack";
         public void show_Basic(){
             System.out.println(Body.this.name);
             System.out.println(name);

             System.out.println(age);
             System.out.println(address);
             System.out.println(phone);
         }
     }
}

实例化内部类的方法如上有:

1.先实例化外部类

Outer outer = new Outer();

再实例化内部类

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

2.直接在实例化内部类时实例化外部类

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

二.注意事项

1.重名访问细节

在show_Basic()中

若内部类与外部类重名则优先访问内部类

若要访问外部类则使用Outer.this.name

静态内部类

实例化不需要依赖外部类,可直接创建或通过类名访问,可声明静态成员。

 Body.Inner02 inner02 = new Body.Inner02();

若内部类要访问外部类成员则要先实例化外部类

public static class Inner02{
        private static String address = "Jinagxi province";
        private static String phone = "259****3258";
        private String name = "Jack";

        public void show_Basic(){
            Body body = new Body();
            System.out.println(body.age);
            System.out.println(body.name);
            System.out.println(address);
            System.out.println(phone);
        }
    }

局部内部类

概念:定义在外部类的方法中,作用范围和创建对象范围仅限于当前方法

     public void show(){
         String address = "jx";
         class Inner03{
             private String phone = "11111111111";
             private String name = "Jack";
             public void show_Basic(){
                 System.out.println(Body.this.name);
                 System.out.println(name);

                 System.out.println(age);
                 System.out.println(address);
                 System.out.println(phone);
             }
         }
         Inner03 inner03 = new Inner03();
         inner03.show_Basic();
     }

其与普通的内部类差不多,但是,在上面的代码中address默认为常量即默认加了final,否则在执行完show函数后该变量被清除,但是inner03不会被清除这个类也不会被清除,这是不允许的。

匿名内部类

特点:

没有类名的局部内部类

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

定义类、实现类、创建对象的语法合并,只能创建一个该类的对象。

       Skills person = new Skills() {
            @Override
            public void service() {
                System.out.println("获得服务技能");
            }
        };
            person.service();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值