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

    一:分类

    成员内部类:普通成员内部类,私有成员内部类,静态成员内部类

    局部内部类

    匿名内部类

    二:普通成员内部类

    可以被哪些修饰:private(私有成员内部类),default,protected,public

    普通成员内部类

    a.可以访问外部类的所有成员,包括私有的

    b.外部类访问内部类成员需要先创建内部类对象

    c.不能有静态资源

    public class InnerClassTest {
        private int a=10;
        
        public void test(){
            System.out.println("外部类test");
            InnerClass innerClass=new InnerClass();
        }
    
        class InnerClass{
            private int a=20;
            
            public void test1(){
    
                test();
                System.out.println(a);
                InnerClassTest innerClassTest=new InnerClassTest();
                innerClassTest.test();
    
                System.out.println("内部类test");
            }
        }
    }
    
    class Test{
        public static void main(String[] args) {
            InnerClassTest.InnerClass innerClass=new InnerClassTest().new InnerClass();
            System.out.println(innerClass);
            innerClass.test1();
        }
    }

    私有成员内部类

    a.若要访问只能提供一个公共的方法访问

    public class PrivateClass {
        private int a=10;
        
        private void test(){
            System.out.println("outer class");
        }
    
        private class PrivateInnerClass{
            private int b=20;
            
            private void test1(){
                System.out.println("inner class");
            }
        }
    
        public void getPrivateInnerClass(){
            PrivateInnerClass privateInnerClass = new PrivateInnerClass();
            System.out.println(privateInnerClass.b);
        }
    }
    
    class Test{
        public static void main(String[] args) {
            PrivateClass privateClass=new PrivateClass();
            privateClass.getPrivateInnerClass();
    
        }
    }

    静态成员内部类

    a.直接使用类名调用

    public class StaticClassTest {
    
        public static void main(String[] args) {
            StaticClassTest.StaticInnerClass.print();
        }
    
        static class StaticInnerClass{
            
            public static void print(){
                System.out.println(123);
            }
        }
    }

    局部内部类

    a.只能在方法体内实例化类

    b.可以直接访问该类的私有属性,都属于该方法

    public class JuBuClassTest {
    
        public static void main(String[] args) {
            test();
        }
        
        public static void test(){
            class JuBu{
                private int a=10;
                private void print(){
                    System.out.println(a);
                }
            }
    
            JuBu juBu=new JuBu();
            juBu.print();
            System.out.println(juBu.a);
        }
    }

    匿名内部类

    在多线程种使用较多

    public class NoNameClass {
        public static void main(String[] args) {
         //相当于创建子类对象并调用方法
    new Cat(){}.eat(); } } class Animal{ void eat(){ System.out.println("吃"); } } class Cat extends Animal{ @Override void eat() { System.out.println("猫吃鱼"); } }
  • 相关阅读:
    wcdb中使用rowid做查询条件
    [转载]Linux下断开SSH连接后,让程序继续在后台执行
    Mac OS X wants to use the “system” keychain 的解决方案
    wcdb的主键和唯一性
    type(),dir(),getattr(),hasattr(), isinstance()用法
    获取昨天日期
    二分法
    三次握手和四次挥手
    py2和py3之间的不同
    flask 接收参数小坑
  • 原文地址:https://www.cnblogs.com/xhlwjy/p/11327588.html
Copyright © 2011-2022 走看看