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

Java之内部类

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

Java之内部类

目录

内部类定义

分类

内部类特点

成员内部类

代码

测试类

 private成员内部类代码

private成员内部类测试类

静态内部类

代码

测试

局部内部类

代码

测试

匿名内部类


内部类定义

定义:内部类就是在一个类的内部再定义一个类,比如A类中定义一个B类,那么B类相对于A类来说就是一个内部类

分类
  • 成员内部类
  • 静态内部类
  • 局部内部类
  • 匿名内部类

内部类特点
  • 内部类可以直接访问外部类的成员,包括私有成员
  • 外部类想要访问内部类成员必须建立内部类对象 

成员内部类

代码
public class Outer {
    private int id=10;
    public void out(){
        System.out.println("我是外部类方法");
    }
    class Inner{
        public void in(){
            System.out.println("我是内部类方法");
        }
        //内部可以获得外部类的私有属性
        public int getId() {
            return id;
        }
        //内部可以获得外部类的私有以及非私有方法
        public void get(){
            out();
        }
    }
}

测试类
public class Test {
    public static void main(String[] args) {
        Outer outer = new Outer();
        //通过外部类来实例化内部类
        Outer.Inner inner = outer.new Inner();
        //获得内部类方法
        inner.in();
        //获得外部类私有属性
        System.out.println(inner.getId());
        //获得外部类方法
        inner.get();
    }
}

注意

成员内部类被Private修饰以后,无法被外界直接创建创建对象使用,所以可以创建外部类对象,通过外部类对象间接访问内部类的资源(private权限修饰符生效的为本类,这个本类就是指本外部类)

 private成员内部类代码
public class Outer {
    private int id=10;
    public void out(){
        System.out.println("我是外部类方法");
    }
    //外部类使用内部类资源
    public void find(){
        //外部类无法直接获取内部类的属性及方法,如果要获取需要创建内部类对象
        //创建内部类对象
        Inner inner = new Inner();
        //获得内部类方法
        inner.in();
        //获得内部类属性
        System.out.println(inner.sum);
        
    }
    
   private class Inner{
        private int sum=100;
        public void in(){
            System.out.println("我是内部类方法");
        }
        //内部可以获得外部类的私有属性
        public int getId() {
            return id;
        }
        //内部可以获得外部类的私有以及非私有方法
        public void get(){
            out();
        }
    }
}

private成员内部类测试类
public class Test {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.find();
    }
}

静态内部类 代码
public class Outer {
    private int id=10;
    public void out(){
        System.out.println("我是外部类方法");
    }
   public static class Inner{
        public int sum=100;
        public static void in(){
            System.out.println("我是内部类方法");
        }

    }
}

测试
public class Test {
    public static void main(String[] args) {
        //创建静态内部类对象
        Outer.Inner inner = new Outer.Inner();
        //访问静态内部类的属性
        System.out.println(inner.sum);
        //访问静态内部类里的静态资源
        Outer.Inner.in();
    }
}

局部内部类 代码
public class Outer {
    private int id=10;
    public void out(){
        System.out.println("我是外部类方法");
         class Inner{
            private int sum=100;
            private void in(){
                System.out.println("我是内部类方法");
            }
        }
        //使用局部内部类的资源
        Inner inner = new Inner();
        System.out.println(inner.sum);
        inner.in();
    }
}
测试
public class Test {
    public static void main(String[] args) {
    new Outer().out();
    }
}

匿名内部类
public class Outer {
    public static void main(String[] args) {
        //创建匿名内部类——实现了该接口的实现类,并调用save方法
        new UserService(){
            @Override
            public void save() {
                System.out.println("我是save方法");
            }
        }.save();
        //创建匿名内部类——该抽象类的子类
        new Aclass(){
            @Override
            void delete() {
                System.out.println("我是delete方法");
            }
        };
    }
}
interface UserService{
    void save();
}
abstract class Aclass{
   abstract void delete();
}

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

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

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