栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

006—Java内部类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

006—Java内部类

成员内部类:
    1.位置
        class 外部类名{
            class 内部类名{}
        }
2.外部类只能使用 public default 修饰
   成员内部类 可以被四种权限修饰符修饰
3.在内部类中可以直接使用外部类的所有资源 4.外部类中可以使用内部类资源 5.可以采用内部类实现多继承的效果
    让内部类 外部类都去继承另一个类 6.内部类中不能声明静态的资源 但是可以有静态的常量 7.内部类会产生独立的字节码文件 命名方式
  外部类名$内部类名.class
  Outer$Inner.class 8.如果内部类与外部类又同名的属性
   访问外部类的属性 外部类名.this.属性名

成员内部类对象的创建的两种方式

必须用外部类对象.new的方式

Outer outer = new Outer()

方式一

                Outer.Inner inner = outer.new Inner()

方式二

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

静态成员内部类:
    1.位置
       class 外部类名{
            static class 内部类名{
            }
       }
   2.静态内部类可以有静态的资源
   3.静态内部类 不能【直接】使用 外部类的非静态资源
       可以创建外部类对象使用 外部类的非静态资源
   4.可以实现多继承的效果
   5.外部类使用静态内部类资源
        静态资源 内部类名.资源名
        非静态资源 内部类对象名.资源名
   6.静态内部类又独立的字节码文件
      命名方式 外部类名$内部类名.class
      Outer$Inner.class
   7.使用内部类资源
     7.1内部类静态资源
       外部类名.内部类名.资源名;
     7.2内部类非静态资源
      外部类名.内部类名 对象名 =   new 外部类名.内部类名();
      Outer.Inner inner = new Outer.Inner();
局部内部类:
    位置:方法内
   1.局部内部类使用外部类资源
     1.1 如果局部内部类在普通方法中 可以直接使用外部类所有资源
     1.2 如果局部内部类在静态普通方法中 可以直接使用外部类静态资源
   2.局部内部类 只能被 权限修饰符 default 修饰  不能使用static 可以使用 final abstract    3.局部内部类中不能有静态的资源 但是可以有静态常量    4.局部内部类也会产生独立的字节码文件 命名方式
     外部类名$序号内部类名.class
     Outer$1A.class
     Outer$2A.class  序号从1开始    5. 如果局部内部类中 使用了方法中的局部变量  那么 此变量 会被final修饰
      jdk8之前  手动添加final
      jdk8(含)之后  自动添加final
package com.atguigu.innerclass.in3;

public class Test {
    public static void main(String[] args) {
        A a = getValue();// A a = new B();
        int num = a.getNum();
        System.out.println("num = " + num);
    }

    public static A getValue(){
        int m = 10;
        class B implements A{
            @Override
            public int getNum() {
                return m;
            }
        }
        B b = new B();
        return b;

    }
}

interface A{
    int getNum();
}

 

 

public static void main(String[] args) {

        int m = new Object(){
            @Override
            public int hashCode() {
                return 10;
            }
        }.hashCode();

        String s = new Object(){
            @Override
            public int hashCode() {
                return 10;
            }
        }.toString();
        System.out.println(s);
    }

 

匿名内部类:
    没有名字的内部类
  1.创建匿名内部类的形式
    1.1 new 类名(构造器){};
    1.2 new 接口名(){};
  2.创建匿名内部类 会有两个作用
     2.1创建了该类/接口的匿名子类
     2.2创建了该/接口匿名子类对象   3.匿名内部类会生成独立的字节码文件
    命名方式 外部类名$序号.class
            Test$1.class    4.匿名内部类是特殊的局部内部类   在方法中

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/341060.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号