目录
成员内部类
实例化
特点:
静态内部类
实例化
特点:
局部内部类
使用:
特点:
匿名内部类
案例:
使用:
public class Animal {
String name; //实例变量
static int age; //静态变量
public void sleep(){
System.out.println("父类的非静态方法");
}
public static void eat(){
System.out.println("父类的静态方法");
}
//成员内部类
class Cat{
String s; //声明实例变量
public void func(){
System.out.println(name); //调用外部类的实例变量
System.out.println(age); //调用外部类的静态变量
sleep(); //调用外部类的非静态方法
eat(); //调用外部类的静态方法
}
}
}
public class Main {
public static void main(String[] args) {
Animal.Cat cat = new Animal().new Cat();
cat.func();
}
}
public class Animal {
String name; //实例变量
static int age; //静态变量
public void sleep(){
System.out.println("父类的非静态方法");
}
public static void eat(){
System.out.println("父类的静态方法");
}
//静态内部类
static class Cat{
String s; //声明实例变量
static int a;//声明静态变量
public static void func3(){} //声明静态方法
public void func(){
System.out.println(age); //调用外部类的静态变量
eat(); //调用外部类的静态方法
}
}
}
public class Main {
public static void main(String[] args) {
Animal.Cat cat = new Animal.Cat();
cat.func();
}
}
public class Animal {
String name; //实例变量
static int age; //静态变量
public void sleep(){
System.out.println("父类的非静态方法");
}
public static void eat(){
System.out.println("父类的静态方法");
}
public void show(){
class A{
int a; //声明实例对象
public void func(){
System.out.println(name);//调用外部类的实例变量
System.out.println(age); //调用外部类的静态变量
sleep(); //调用外部类的非静态方法
eat(); //调用外部类的静态方法
}
}
//使用
A a = new A();
a.func();
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
animal.show();
}
}
匿名内部类一般作用于存在继承或者实现关系 ,直接创建类或者接口的匿名内部类。
匿名内部类一般都需要重写父类或者接口中的方法,否则毫无意义
类:
public class Animal {
String name; //实例变量
static int age; //静态变量
public void sleep(){
System.out.println("父类的非静态方法");
}
public static void eat(){
System.out.println("父类的静态方法");
}
public void show(){}
}
接口:
public interface Operation {
void work();
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal(){
@Override
public void show() {
System.out.println("匿名内部类,重写类中show方法");
System.out.println(name);
System.out.println(Animal.age);
sleep();
eat();
}
};
animal.show();
System.out.println("==============");
Operation operation = new Operation() {
@Override
public void work() {
System.out.println("匿名内部类,重写接口中work方法");
}
};
operation.work();
}
}
匿名内部类常用于对象比较器的使用,线程的创建等情况。