内部类,静态内部类,成员内部类,匿名内部类
内部类:
内部类是再类中建立类
class name{
class n{
}
}
//调用内部类是要先调用外部类的
public class{
public static void main(....){
name na=new na();
name n a=na.new n();
//侧面反应出建立的规则,左边是声明,右边是实例化的定义所以调用的实例外部类na.(左边只是给他一个可视化的名字,右边是给其一个地址)
}
}
——————————————————————————————————————————
成员内部类:
class Dog{
public void f(){//方法,为以后的外部类的调用提供接口,
class D{
public int n=3;
void show(){
System.out.print(n);
}
}
D d=new D();
//此类的实例化是在方法中建立起类的实例化,当方法的执行直接跑到此步
d.show();
}
}
public class Main{
public static void main(String[] args){
Dog d=new Dog();
d.f();
}
}
//声明:局部内部类和局部变量差不多
————————————————————————————————————————————
class Dog{
static int n=1;
int a=3;
static class D{
void show(){
System.out.print(n);
//System.out.print(a); ERROR; 静态内部类只能访问外部类的静态成员
}
/*解析personal:大致原因类外部类不用时候是被回收机制回收,而静态内部类是到系统的结束为止,
如果不是静态外部类成员,再次访问就出错*/
/*官方点:因为外部类的非静态方法是需要创建外部类对象才能调用的,而你的静态内部类是不需要外部类对象就可以得到的*/
}
}
public class Main{
public static void main(String[] args){
//静态内部类的建立可以直接跳过外部类的实例化
Dog.D d=new Dog.D();
}
}
————————————————————————————————————————————
//匿名内部类:
//匿名内部类是该类或者该接口的子类的匿名对象
interface Animal{
void shout();
}
public class Main{
public static void main(String[] args){
String name="小花";
animal(new Animal(){//这是接口的之类匿名对象,并且定义了shout方法
public void shout(){
System.out.println(name+"mm");
}
});
}
public static void animal(Animal a){
a.shout();
}
}
package Test;
abstract class Animal{
public abstract void shout();
}
public class Main{
public static void main(String[] args){
new Animal(){
public void shout(){
System.out.println("555");
}
}.shout();//.(点)前面是一个对象直接调方法
}
}