版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29451823/article/details/79169359
-
成员内部类
package online.qinshixun.outerclass; /** * * @author CJJ * 成员内部类 */ class Outer { private int a = 5; private Inner in; public Outer() { super(); } public Outer(int a) { in = new Inner(a); } public int getInnerA() { return in.a;//引用内部类的变量,需通过实例 } public class Inner { public Inner(int a ) { this.a = a; } public Inner() { super(); } public int a = 3; public void doSomething() { //调用外部类的属性 System.out.println("外部a:"+Outer.this.a); System.out.println("类部a: "+a); } } } class Extender extends Outer.Inner { public Extender(Outer outer) { //外部类实例名.super(内部类参数列表) outer.super(6); } } public class Test3 { public static void main(String []args) { Outer.Inner inner = new Outer().new Inner(); inner.doSomething(); Extender extender = new Extender(new Outer()); extender.doSomething(); } }
-
列表内容
package online.qinshixun.outerclass; /** * * @author CJJ * 静态内部类 * 静态内部类只能访问外部类的静态成员 * 内部类可以访问外部类的非静态成员和静态成员 */ public class StaticInnerClass { public static void main(String[] args) { //创建静态内部类的实例 OuterClass.NestedStaticClass printer = new OuterClass.NestedStaticClass(); printer.printMessage(); } } class OuterClass { private static String msg = "静态成员变量"; //静态内部类 public static class NestedStaticClass { //静态内部类只能访问外部类的静态成员 public void printMessage() { System.out.println("msg = " + msg); } } }
-
局部内部类
package online.qinshixun.outerclass; /** * * @author CJJ * 局部内部类只能在代码代码块、方法体内和作用域中使用(如创建对象和使用类对象等) * 局部内部类访问作用域内的局部变量,该局部变量需要使用final修饰。(JAVA8以下) * 可以使用abstract修饰,声明为抽象类。 */ public class LocalInnerClass { public static void main(String[] args) { LocalInnerClass inner = new LocalInnerClass(); inner.method(); } //局部内部类 public void method() { int num2 = 44; class JuIn { public void zhanshi() { /* * 按理说局部内部类访问局部变量,局部变量应该用final修饰,但是不用final修饰也是可以访问的, * 这是因为在JDK8以下必须用final修饰,不然会报错, * Cannot refer to a non-final variable a inside an inner class defined in a different method, * 但是在JDK8之后就不会出现这种状况 * */ System.out.println(num2); } } System.out.println("访问局部变量" + num2); //局部创建内部类对象 JuIn ji = new JuIn(); ji.zhanshi(); } }
-
匿名内部类
package online.qinshixun.outerclass; /** * * @author CJJ * a·匿名内部类就是没有名字的局部内部类,不使用关键字class, extends, implements, 没有构造方法。 * b·匿名内部类不能定义任何静态成员、方法和类。 * c·匿名内部类不能是public,protected,private,static。 d·只能创建匿名内部类的一个实例。 * e·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。 * f·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。 */ public class AnonymousInnerClass { public static void main(String[] args) { //new 抽象类或者 接口 Doctor d = new Doctor() { //匿名内部类 public void workInNight() { System.out.println("晚上睡觉"); } }; d.workInDay(); d.workInNight(); } } interface QinShou { public void workInNight(); } abstract class Doctor implements QinShou{ //多态,情况不定 public void workInDay() { System.out.println("白天学习知识"); } }
-
匿名内部类labmda表达式
// java 8之前 new Thread(new Runnable() { @Override public void run() { System.out.println("Before Java8,too much too little to do"); } }).start(); // java 8 Lambda方式 new Thread(() -> System.out .println("In Java8, Lambda expression rocks!!!")).start();