什么是静态内部类?
有static修饰的内部类,属于外部类自己持有。
public class Outer
{
//静态内部类
public static class Inner{
}
}
创建对象的格式:
外部类名.内部类名 对象名 = new 外部类.内部类(...);
Outer.Inner in = new Outer.Inner();
静态内部类中访问外部类成员的特点
可以直接访问外部类的静态成员,不可以直接访问外部类的实例成员。
public class Test{
public static void main(String []args)
{
//目标:了解静态内部类
Outer.Inner in = new Outer.Inner();
in.test();
}
}
public class Outer
{
private int age;
public static String schoolName;
//静态内部类
public static class Inner
{
private String name;
public static int a;
public void test()
{
System.out.println(schoolName);
//错误System.out.println(age);
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name= name;
}
public static void test2()
{
System.out.println(SchoolName);
//System.out.println(age); //错误
}
}
}
总结
1、什么是静态内部类?如何创建对象?有啥特点?
有static 修饰的内部类
外部类名.内部类名 对象名 = new 外部类。内部类(…)
可以直接访问外部类的静态成员,不能访问外部类的实例成员。
局部内部类(无用)
局部内部类是定义在方法中、代码块中、构造器等执行体中。
public class Test{
public static void main(String []args)
{
}
public static void go()
{
class A{
}
abstract class b
{
}
interface C{
}
}
}
匿名内部类
就是一种特殊的局部内部类;所谓匿名:指的是程序员不需要为这个类声明名字。
new 类或接口(参数值...)
{
类体(一般是方法重写)
}
public class Test{
public static void main(String[] args)
{
//目标:认识匿名内部类,并掌握其作用。
// Animal a =new Cat();
// a.cry();
// 1、把这个匿名内部类编译成一个子类,然后会立即创建一个子类对象出来。
Animal a = new Animal(){
@Override
public void cry()
{
System.out.println("喵喵喵喵的叫~~~");
};
}
a.cry();
}
}
//class Cat extends Animal {
// @Override
// public void cry()
//{
// System.out.println("喵喵喵喵的叫~~~~~");
//}
// }
abstract class Animal{
public abstract void cry();
}
匿名类编译后情况
文件形式
特点:匿名内部类本质就是一个子类,并会立即创建出一个子类对象。
匿名内部类在开发中的使用场景
通常作为一个参数传输给方法。
public class Test2{
public static void main(String []args)
{
//目标:掌握匿名的常见使用场景。
//Swimming s1 = new Swimming(){
//@Override
//public void swim(){
//System.out.println("狗游的飞快~~~~");
//}
//};
//}
// go(s1);
go(new Swimming(){
@Override
public void swim()
{
System.out.println("狗游的飞快~~~~~");
}
});
//设计一个方法,可以被接受swimming接口的一切实现类对象进来参加游泳比赛。
}