java内部类有四种,成员内部类,静态内部类,局部内部类,匿名内部类
成员内部类
* 成员内部类访问权限
- 成员内部类可以访问外部类的所有成员(静态及非静态方法,变量)
* 成员内部类的生成
- 须借助外部类生成
定义格式如下:
package poyimima.test;
import org.junit.Test;
import poyimima.dimidir.Father;
public class MyTest {
static int i=0;
int j=0;
MyTest() {
}
//成员内部类
class Class1 {
int age;
String name;
public void test(){
}
}
//普通成员方法
public void newclassone() {
Class1 class1 = new Class1();
}
//普通成员方法
public void newclasstwo() {
}
//主函数
public static void main(String[] args) {
MyTest myTest = new MyTest();
Class1 class1 = myTest.new Class1();
}
}
静态内部类
* 静态内部类访问权限
- 静态内部类可以访问外部类的静态方法,变量
* 静态内部类的生成
- 因为静态内部类属于类本身,可以直接new出
定义格式如下:
package poyimima.test;
import org.junit.Test;
import poyimima.dimidir.Father;
public class MyTest {
static int i=0;
int j=0;
MyTest() {
}
//静态内部类
static class Class1 {
int age;
String name;
public void test(){
}
}
//普通成员方法
public void newclassone() {
}
//普通成员方法
public void newclasstwo() {
}
//主函数
public static void main(String[] args) {
Class1 class1 = new Class1();
}
}
局部内部类
* 局部内部类访问权限
- 局部内部类可以访问外部类的所有成员(静态及非静态方法,变量)
* 局部内部类的生成
- 仅局限于方法内部
定义格式如下:
package poyimima.test;
import org.junit.Test;
import poyimima.dimidir.Father;
public class MyTest {
MyTest() {
}
//局部内部类是否可在其他方法里new出?
//看来不可以
public void newclassone() {
class Class1 {
int age;
String name;
}
Class1 class1 = new Class1();
}
}
局部内部类常见问题
局部内部类是否可在其他方法里new出?
答案: 不可以
public class MyTest {
MyTest() {
}
//局部内部类是否可在其他方法里new出?
//看来不可以
public void newclassone() {
class Class1 {
int age;
String name;
}
Class1 class1 = new Class1();
}
public void newclasstwo() {
new Class1() //这里直接爆红
}
}
匿名内部类
较为常用
创建方式
public class MyTest {
static int i=0;
int j=0;
//普通成员方法
public void newclassone() {
}
//普通成员方法
public void newclasstwo() {
}
//主函数
public static void main(String[] args) {
new Service(){
@Override
public void method() {
System.out.println("吃饭");
}
}.method();
}
interface Service{
void method();
}
}