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";
            }
        }
    
  • 相关阅读:
    java笔记之输入输出流
    英文单词个数统计及排序
    课后作业_程序员修炼之道读后感
    第五周-内网穿透简易搭建(远程查看javaweb程序)
    第五周总结
    结对开发
    第四周学习总结
    第四周--爬虫的学习
    第四周学习总结
    第三周---------学习动态规划
  • 原文地址:https://www.cnblogs.com/xiaodou00/p/14764450.html
Copyright © 2011-2022 走看看