含义:定义在内部的一个类
位置:类中方法外 格式: 【定义】:class 名字{……} 【调用】:外部类名.内部类名 命名 = new 外部类名().new 内部类名() 【注意】: ①内部类可以直接使用外部类的成员 ②外部类使用内部类成员(包括私有成员)时,需要先实例化(外部类可以使用内部类私有成员,所以内部类成员没必要私有化)
【注意】: 私有化内部类时,不可直接访问该内部类,但是可以通过调用外部类的共有方法,间接访问
public class 私有的成员内部类 { public static void main(String[] args) { Body b = new Body(); b.show(); } } class Body { private int height = 149; private class Wo { int age = 40; public void speak() { System.out.println(height + "\t" + age ); } } public void show() { System.out.println(height); //其他的类中,无法访问Wo类,所以只能在当前外部类Body中,创建Wo类对象 Wo w = new Wo(); w.speak(); } }格式: 定义:static class 命名{……} 【调用】: 外部成员名.内部成员名 命名 = new 外部成员名.内部成员名() 因为静态成员内部类加载时就创建,所以使用时,不需要实例化静态成员内部类
【注意】: ①静态成员内部类不可使用外部类中的非静态变量、方法。但是,外部类可以使用静态内部类的变量、方法 ②由于是静态的所以随着加载而创建至静态区,所以不用创建静态内部类对象
public class 静态的成员内部类 { public static void main(String[] args) { Body.Gan bg = new Body.Gan(); bg.speak(); } } class Body { private int height = 149; static class Gan { String color = "black"; public void speak() { // System.out.println(height);//静态环境下不能直接访问非静态的变量 System.out.println(color); } } public void show() { System.out.println(height); } }位置:方法中 定义:定义在方法中的类
调用:通过调用含内部类的方法,间接调用局部内部类。 步骤:【先在含局部内部类的方法中实例化,然后通过调用该方法,从而间接访问局部内部类】 【注意】: ①外部不可直接访问局部内部类(内部类是不可见的); ②即使外部获取局部内部类对象,也不可访问类中变量、方法(如何让外界获取局部内部类:比如,该方法return 这个局部内部类)。 ③局部内部类中可直接使用,包含该局部内部类的方法中的变量、方法。
格式:
new 父类或者接口名(){ 对父类或者接口中的方法的重写; };【注意】: 1)必须存在继承或者是接口的实现的关系 2)只能调用父类或者接口中定义的方法,不能调用自己特有的方法 3)不能向下转型,类名都没有 4)可以将匿名对象赋值给父类或者接口的引用 初版:
public class demo_匿名内部类 { public static void main(String[] args) { //匿名内部类 new Person() { @Override public void eat() { System.out.println("吃饭了"); } }.eat(); } } interface Person{ public abstract void eat(); }使用lambda表达式
public class demo_精简匿名内部类 { public static void main(String[] args) { //精简版。lambda表达式 Person per = () -> System.out.println("lambda表达式,吃饭了"); per.eat(); //方法引用 Person1 per2 = System.out :: println; per2.eat();//只是换行,因为没有打印任何内容 } } interface Person{ public abstract void eat(); } >>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<PS: 【】表示重要,删除线表示已解决 学习记录所用,有问题望指出哦~