java中的内部类

分类

第一类:定义在外部类局部位置上,分为局部内部类( 有 类名)、匿名内部类(没有类名)。

第二类:定义在外部类的成员位置上,分为成员内部类(没有static修饰)、静态内部类(使用static修饰)。

一:局部内部类

public class TestDemo {
    public static void main(String[] args) {
        Person person = new Person();
        person.method2();
    }
}
class Person{//外部类
    private String name = "张三";
    private int age = 20;
 
    private void method1(){
        System.out.println("外部类中的method1方法");
    }
 
    public void method2(){
        final class Student{//局部内部类可以加fianl关键字
            private String name = "王五";
            public void method3(){
                method1();//可以访问外部类中的成员
            }
        }
        /**
         * 外部类访问局部内部类的方式:创建对象再访问
         */
        Student student = new Student();
        student.method3();
    }
}

二 成员内部类

class People{//外部类
    private String name = "张三";
    private int age = 20;
 
    private void hi(){
        System.out.println("打招呼");
    }
 
    public class Student{//内部类
        private String name = "李四";
        private int age = 21;
        public void say(){
            System.out.println("name="+name+" age="+People.this.age);
        }
    }
 
   
 
    public void method(){//外部类访问内部类
        Student student = new Student();
        student.say();
    }
}

三 静态内部类

public class TestDemo {
    public static void main(String[] args) {
        People person = new People();
        person.method();
    }
}
class People{//外部类
    private String name = "张三";
    private int age = 20;

    private void hi(){
        System.out.println("打招呼");
    }

    public static class Student{//静态内部类
        private String name = "李四";
        private int age = 21;
        public void say(){
            System.out.println("name="+name+" age="+this.age);
        }
    }
    public void method(){//外部类访问内部类
        Student student = new Student();
        student.say();
    }
}

 四 匿名类

本质上是一个没有名字的局部内部类,定义在方法中、代码块中等。 作用:方便创建子类对象,最终目的为了简化代码编写。

语法结构

new 类|抽象类名|或者接口名() {
   重写方法;};

举例:

public class Test {
    public static void main(String[] args) {
//        Animal a = new Tiger();
//        a.run();
        new Animal(){
            @Override
            public void run() {
                System.out.println("老虎跑的块~~~");
            }
        }.run();
    }
}
//class Tiger extends Animal{
//    @Override
//    public void run() {
//        System.out.println("老虎跑的块~~~");
//    }
//}

abstract class Animal{
    public abstract void run();
}

java8新特性的的应用

List<String> items = new ArrayList<>();
items.add("A");
items.add("B");
items.add("C");
items.add("D");
items.add("E");
//单独的 forEach 写法
Consumer consumer = new Consumer<String>() {
 @Override
 public void accept(String s) {
 System.out.println(s);
 }
};
items.forEach(consumer);
 
System.out.println("forEach结合Lambda写法==========");
//输出 A,B,C,D,E
items.forEach(s -> {
 System.out.println(s);
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值