zoukankan      html  css  js  c++  java
  • 内部类

    概念:在java中,一个类也可以定义在一个类的内部,定义在内部的类称为内部类(inner class),定义在外部的类称为外部类(out class)

    语法:

    public class Outer {
        
        [修饰符] class Inner{
            
        }
    }

    经过编译后这两个类是平行关系

    分类:

    一:成员内部类

    上面的例子就是成员内部类,成员内部类一般都用默认修饰符

    (1)内部类怎么创造对象呢

    public class Test01 {
        public static void main(String[] args) {
            
            // 【1】先创建外部类对象
            Outer outer = new Outer();
            // 【2】创建内部类对象
            Inner inner = outer.new Inner();
            inner.showInfo();
        }
    }

    (2)内部类可以访问外部类的私有成员变量(原理:作用域作用)

    public class Outer {
        
        private String name = "Outer";
        
        class Inner{
            
            public void showInfo() {
                System.out.println(name);
            }
            
        }
    }

    特殊情况:如果内部类变量名和外部类变量名相同,那访问形式是

    public class Outer {
        
        private String name = "Outer";
        
        class Inner{
            
            private String name = "Inner";
            
            public void showInfo() {// 访问外部类的私有成员
                System.out.println(this.name);
                
                // 访问外部类的私有成员
                System.out.println(Outer.this.name);
                
            }
        }
    }

    二:静态内部类

    也就是内部类被static修饰符修饰了

    (1)创建静态内部类

    public class Test01 {
        public static void main(String[] args) {
            
            Inner inner = new Outer.Inner();
            inner.showInfo();
        }
    }

    (2)静态内部类可以访问外部内的(私有)静态成员

    public class Outer {
        
        private static String name = "Outer";
        
        static class Inner{
            
            public void showInfo() {
                System.out.println("showInfo");
                
                System.out.println(name);
            }
        }
    }

    三:方法内部类

    将类定义到方法中

    public class Outer {
        
        public void print() {
            
            class Inner{        
                public void showInfo() {
                    System.out.println("show info");
                }
            }
             
            Inner inner = new Inner();
            inner.showInfo();
        }
    }

    注意:如果方法中的变量进入该内部类,那么自动被final修饰变成常量

    public class Outer {
        
        public void print(int b) {
            
            int a = 10;
            
            class Inner{
                
                public void showInfo() {
                    System.out.println("show info");
                    
                    System.out.println("print() ->a:"+10);
                    
                    // 在方法内部类中不能修改方法的局部变量(final)
                    // a = 20;
                    // b = 20;
                }
            }
            
            a = 20;
            
            Inner inner = new Inner();
            inner.showInfo();
        }
    }

    四:匿名内部类

    如果要使用的类未来只会用到一次,那么可以声明该类为匿名的

    *匿名内部类一定要实现接口

    package cn.sxt01.inner04;
    
    public class Outer {
        
        public void print() {
            
            // 方法内部类
            /*class Inner implements MyInterface{
    
                @Override
                public void showInfo() {
                    System.out.println("Inner:showInfo");
                }
                
            }*/
            
            /*Inner inner = new Inner();
            inner.showInfo();*/
            
            // new Inner().showInfo();
            
            // 匿名内部类
            new MyInterface(){
                @Override
                public void showInfo() {
                    System.out.println("Inner:showInfo");
                }
            }.showInfo();
            
        }
    }
  • 相关阅读:
    react-native 安卓支持 gif动态图
    react-navigation,StackNavigator,TabNavigator 导航使用
    poj3694 网络(板子题)
    POJ1275 Cashier Employment 差分约束(优化 二分)
    Codeforces Round #667 (Div. 3)
    POJ1201 Intervals 差分约束(贪心也可)
    YY的GCD
    Codeforces Round #666 (Div. 2) A~E
    Rendezvous
    创世纪
  • 原文地址:https://www.cnblogs.com/zhangxiong-tianxiadiyi/p/10776145.html
Copyright © 2011-2022 走看看