zoukankan      html  css  js  c++  java
  • Java四种内部类

    成员
    成员内部类
    静态内部类
    局部
    方法内部类
    匿名内部类

    依赖外部类对象的:成员内部类,方法内部类,匿名内部类
    静态内部类不依赖外部类的对象,所以,我们在项目中优先考虑选择静态内部类
    package QianFeng02;
    //内部类
    public class InnerTest {
        public static void main(String[] args){
            //在外部创建成员内部类实例,
            Outer outer=new Outer();
    //         因为成员内部类需要依赖外部类的对象,不建议这样创建
    //        Outer.Inner2 inner2=outer.new Inner2();
    //        inner2.print();
            outer.innerPrint();//通过innerPrint访问内部类
            outer.show();//方法内部类
    
            Outer.Inner3 inner3=new Outer.Inner3();    //静态类直接:类名.内部静态类名
            inner3.print();
    
            outer.print11();//(1.继承式)
            outer.print2();//(2.匿名类的 接口式)
            outer.print3(new Eat(){//(匿名内部类 3.参数式)
                public void eat() {
                    System.out.println("匿名内部类 3.参数式");
                }
            });//(3.参数式匿名类)
        }
    }
    class Outer{
        private String name="除了静态内部类,内部类成可以很方便使用成员变量";
    //----------------1.成员内部类----------------
        public void innerPrint(){//建议在外部类中定义一个方法,对外提供访问内部类接口
            Inner2 inner2=new Inner2();
            inner2.print();
        }
        //内部类(封装性)
    
        class Inner2{//1.成员内部类
            private void print(){
                System.out.println("{成员内部类}"+name);
            }
        }
    //    ----------------2.方法内部类---- ----------
        public void show(){
            final int x=10;  //方法内部类的引用的变量 必须是常量(final),不写声明默认final
            class Inner2{
                public void print(){
                    System.out.println("{方法内部类}"+x+name);//为什么用final呢?
                }
            }
            Inner2 inner2=new Inner2();//调用方法内部类(在方法里面调用实例化)不能在方法外实例化
            inner2.print();
        }
        //----------------3.静态内部类----------------
    /*
    在一个类内部定义一个静态内部类:
    静态的含义是该内部类可以像其它静态成员一样,没有外部类对象时,可以直接访问
    静态嵌套仅能访问外部类的静态成员和方法
    */
    static class Inner3{
        public void print(){
            System.out.println("静态内部类");
            }
        }
    //----------------4.匿名内部类----------------
        /*1.不能有构造方法
          2.不能定义任何静态成员,方法
          3.不能是public.protected,private,static
          4.一定是在new的后面,用其隐含一个接口或者实现一个类
          5.匿名内部类为局部的,所以局部内部类的所有限制都对其生效
        * */
        //(1.继承式)
        public void print11(){
            CatGame cat=new CatGame(){
                public  void game(){
                    System.out.println("猫玩");
                }
            };
            cat.game();
        }
        //*(2.接口式)
        public void print2(){
        Eat e=new Eat(){
            @Override
            public void eat() {
                System.out.println("匿名类的 接口式");
            }
        };
        e.eat();
        }
        //(3.参数式)
        public void print3(Eat eat){//传入接口
            eat.eat();
        }
    
    }
    interface Eat{
        public void eat();
    }
    
    abstract class CatGame{
        public abstract void game();
    }
    /*
    方法内部类的引用的变量 必须是常量(final)
    为什么用final呢?
    final 修饰变量是 常量,会把变量进入到常量池,延长生命周期,以免被销毁
    jdk1.8 可以不写final ,系统会默认 final.
    */
    

      

  • 相关阅读:
    Spring Bean的生命周期
    Java中的Object类
    Java线程池七个参数
    ROS 第五讲 在模拟器中构建第一个机器人
    ROS 第四讲 让小车在RViz与Gazebo模拟器中跑起来
    ROS 第三讲 操控小乌龟
    ROS 第二讲 基本操作
    ROS 第一讲 引入
    自然语言处理(二) 新词发现或非监督词典构建
    递归找到一个复杂对象中的某个值和它的最小层级
  • 原文地址:https://www.cnblogs.com/july7/p/11219346.html
Copyright © 2011-2022 走看看