• 内部类


    1 成员内部类创建对象  外部类.内部类     

    对象名=new 外部类对象.new内部类对象

    Outer.Inner i=new Quter().new Inner();

      内部类可以访问外部类私有

      外部类访问内部类 需要创建对象

      外部类名.内部类名 对象名=new 外部类对象.new内部类对象

      

           私有内部类 不能通过上述方法创建对象,在自己所在的内部类中创建对象

      静态内部类 创建对象   外部类名.内部类名 对象名=new 外部类名.内部类名();

      

    package com.yang.innerClass;
    
    public class Car {
        String brand="外部类小马";
        class Engin{
            String brand="内部类中马";
            public void run(){
                String brand="局部老马";
                System.out.println(brand+this.brand+Car.this.brand);
            }
        }
    
    }
    

      

    package com.yang.innerClass;
    
    public class MTest {
        public static void main(String[] args) {
            Car.Engin c=new Car().new Engin();
            c.run();
        }
    }
    

      

      

    2 局部内部类(该类在类的成员方法中)

    只能在内部类所在的方法中,创建对象并访问

    该内部类可以访问外部类成员,也可以访问方法的局部变量

    匿名内部类

      new 接口名 或者类名(){

        重写方法

    }.方法

    package com.yang.innerclass;
    
    public class MTest {
        public static void main(String[] args) {
            new Inner(){
                public void study(){
                    System.out.println("好好学习");
                }
                public void  show(){
                    System.out.println("show......");
                }
            }.show();
        }
    }
    

      想用两个方法  Inner i=new Inner(){实现}; i.方法;

    package com.yang.innerclass;
    
    public interface Inner {
        public abstract void study();
        public  void show();
    }
    

      

    Lambda表达式 函数式编程思想 (自己想做什么)

    1 必须是接口

    2 抽象方法数量必须是一个,只能是一;

    三要素 形式参数 箭头 代码块

        (形式参数) -> {代码块}

    package com.yang.Lambda;
    
    public class TestLambda {
        public static void main(String[] args) {
            useShowHandler(()-> System.out.println("Labmbda使用方法"));
        }
    
        public static void useShowHandler(ShowHandler showHandler){
                showHandler.show();
        }
    }
    interface ShowHandler{
        void show();
    }
    

      

    package com.yang.Lambda;
    
    public class TestLambda1 {
        public static void main(String[] args) {
            printMessage((String mes)->{
                System.out.println("匿名内部类"+mes);
            });
        }
        public static void printMessage(StringHander stringHander){
            stringHander.printMessage("王");
        }
    }
    interface StringHander{
        void printMessage(String mes);
    }
    

     Lambda无参带有返回值 

    package com.yang.innerReturn;
    
    import java.util.Random;
    
    public class MTest {
        public static void main(String[] args) {
            getNum(()->{
                Random random=new Random();
                int i=random.nextInt(10)+1;
                return i;
            });
        }
        public static void getNum(InnerHander innerHander){
            System.out.println(innerHander.getNum());
        }
    }
    

      

    package com.yang.innerReturn;
    
    public interface InnerHander {
        int getNum();
    }
    

    Lambda 有参数有返回值  和上面的例子类似就不写了

    Lambda省略模式  参数可以省略,如果参数有多个不能只省略一个,参数只有一个可以省略小括号,大括号中只有一条语句 大括号可以省略 renturn 可以省略,分号可以省略

    package com.yang.innerReturn1;
    
    import com.yang.innerReturn.InnerHander;
    
    import java.util.Random;
    
    public class MTest {
        public static void main(String[] args) {
            getNum(()-> new Random().nextInt(10)+1
            );
        }
        public static void getNum(InnerHander innerHander){
            System.out.println(innerHander.getNum());
        }
    }
    

    Lambda表达式和匿名内部类

    匿名内部类 可以接口,可以抽象类,可以具体类。 编译后会产生独立字节码文件

    Lambda 只能是接口 只能有一个抽象方法。编译后不会产生字节文件,对应的字节码会在运行中动态的生成。

  • 相关阅读:
    2019年第九周作业
    2019年春第八周作业
    2019年春第七周作业
    2019春第六周作业
    2019年春季学期第五周作业
    2019年春季学期第四周作业
    2019年春季学期第三周作业 ----PTA作业
    2019年春季学期第三周作业
    2019春第七周作业
    第五周作业
  • 原文地址:https://www.cnblogs.com/yang-qiu/p/15375833.html
Copyright © 2020-2023  润新知