zoukankan      html  css  js  c++  java
  • java基础——java的四种内部类

    1.成员内部类

    1.1 拥有类的所有访问权限

    成员内部类可以无条件访问外部类所有的成员属性和成员方法(包括private成员和静态成员

    1.2 访问同名成员要用this

    说过要访问外部类的同名成员,要用以下新式访问

    • 外部类.this.成员变量
    • 外部类.this.成员方法

    1.3 外部类访问要先创建对象

    在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问

    1.4 创建成员内部类要有外部类对象

    Outter outter = new Outter();
    Outter inner inner = outter.new inner()
    

    1.5 内部类可以有所有访问权限

    内部类可以拥有private,protected,public,包权限

    1.6 总体实践代码

    public class Test {
        public String a = "aa";
        private String b;
    
        public class PublicClass{
            public PublicClass() {
            }
            public String a = "bb";
            public void test(){
                System.out.println(this.a);
                System.out.println(Test.this.a);
            }
        }
        private class privateClass{
    
        }
        protected class protectedClass{
    
        }
    
        public static void main(String[] args) {
            Test test = new Test();
            Test.PublicClass aa = test.new PublicClass();
            aa.test();
        }
    }
    

    2.局部内部类

    局部内部类就像是方法里面的一个局部变量,不能有public,protected,private以及static修饰符

     //测试局部内部类
        public void test() {
    //        编译报错
    //        public class jubuClass{
    //
    //        }
            class jubuClass {
                public void test() {
                    System.out.println(Test.this.a);
                }
            }
        }
    

    3.匿名内部类

    • 匿名内部类不能有修饰符和static修饰符
    • 匿名内部类没有构造器
    • 匿名内部类不能定义任何静态成员、方法
    • 匿名内部类必须实现接口或抽象父类的所有抽象方法
        interface HelloWorld {
            public void greet();
            public void greetSomeone(String someone);
        }
        //测试匿名类
        HelloWorld helloWorld = new HelloWorld() {
            @Override
            public void greet() {
            }
            @Override
            public void greetSomeone(String someone) {
            }
        };
    

    4.静态内部类

    • 静态内部类不需要依赖外部类
    • 不能使用外部类非静态的成员变量和方法
        public String a = "aa";
        public static String c = "cc";
        private String b;
    
        static class staticTest{
            public void test(){
                c = "aaa";
                //编译不通过
                a = "ccc";
            }
        }
    
  • 相关阅读:
    NYOJ127 星际之门(一)【定理】
    JAVAWEB开发之JSTL标签库的使用、 自己定义EL函数、自己定义标签(带属性的、带标签体的)
    如何写一个不可变类
    保护性拷贝
    猴子搬香蕉问题
    阿里云服务器安装redis启动失败问题排查
    oauth2测试
    远程连接云服务器上的mysql失败问题解决
    SQLServer中将yyyy:MM:dd HH:mm:ss.sss转为yyyyMMddHHmmss
    Centos8 安装 MySQL
  • 原文地址:https://www.cnblogs.com/xiaodou00/p/14764450.html
Copyright © 2011-2022 走看看