内部类
<h3 id="什么是内部类">什么是内部类</h3><p>内部类是一个定义在另一个类内部的类。<br>
内部类可分为四种:</p>
<h5 id="1-成员内部类-定义在另一个类内部且没有使用static修饰且可以访问外部类所有的成员要创建内部类的实例必须先存在外部类的实例">1. 成员内部类: 定义在另一个类内部,且没有使用static修饰,且可以访问外部类所有的成员。要创建内部类的实例必须先存在外部类的实例。</h5>
<pre><code class="language-java">public class Outer {
String name;
class Inner {
public void test() {
System.out.println("Inner test" + name);
}
}
public static void main(String[] args) {
Outer outer = new Outer();
Inner inner = outer.new Inner();
outer.name = "Inner";
inner.test();
}
}
</code></pre>
<h5 id="2-静态内部类用static修饰的内部类创建内部类无需所外的外部类可直接声明">2. 静态内部类:用static修饰的内部类,创建内部类无需所外的外部类,可直接声明。</h5>
<pre><code class="language-java">public class Outer {
public static class Inner {
public void test() {
System.out.println("Inner test");
}
}
public void test() {
Inner inner = new Inner();
inner.test();
}
public static void main(String[] args) {
Inner inner = new Inner();
inner.test();
}
}
</code></pre>
<pre><code class="language-java">import org.self.study.day2.inner.Outer.Inner;
// 其他外部类
public class Other {
public static void main(String[] args) {
Inner inner = new Inner();
inner.test();
}
}
</code></pre>
<h5 id="3-局部内部类--在方法内部构造方法代码块内部或者作用域内的类if-or-for外部无法访问不能使用访问修饰符可以访问外部类所有成员包括私有成员可以访问方法中的final或等效final的局部变量">3. 局部内部类 : 在方法内部、构造方法、代码块内部或者作用域内的类(if or for),外部无法访问,不能使用访问修饰符,可以访问外部类所有成员包括私有成员,可以访问方法中的final或等效final的局部变量</h5>
<pre><code class="language-java">public class Outer {
public String name;
String sex;
private int age;
protected String mark;
public void test() {
// 局部内部类
class MethodInner {
public void test() {
System.out.println(name);
System.out.println(age);
System.out.println(mark);
System.out.println(sex);
System.out.println("MethodInner test");
}
}
MethodInner methodInner = new MethodInner();
methodInner.test();
}
public static void main(String[] args) {
Outer outer = new Outer();
outer.test();
}
}
</code></pre>
<h5 id="4-匿名内部类是一种特殊的内部类它没有类名通常用于只需要实现一次的实例类匿名类在声明的同时实例化通常用于接口实现或者继承类">4. 匿名内部类:是一种特殊的内部类,它没有类名,通常用于只需要实现一次的实例类,匿名类在声明的同时实例化。通常用于接口实现或者继承类。</h5>
<pre><code class="language-java">Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("Hello from anonymous class!");
}
};
new Thread(r).start();
</code></pre>
<p>lambda表达式</p>
<pre><code class="language-java">Runnable r = () -> System.out.println("Hello from lambda!");
new Thread(r).start();
</code></pre><br><br>
来源:https://www.cnblogs.com/tianzhentian/p/19109142
頁:
[1]