Java内部类
1.
静态嵌套类 (Static Nested Class) 和内部类(Inner Class)的不同?(2017-
11-16-wl)
静态嵌套类:Static Nested Class 是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例
化。
内部类:需要在外部类实例化后才能实例化,其语法看起来挺诡异的。
内部类(可以为static,外部类不可)
•
成员嵌套类
•
局部嵌套类
•
静态
•
非静态
•
匿名嵌套类
也相当于类的成员,接受类成员的约束。
事物:人 包含 心
成员方法
方式一:封装调用:在外部类中定义public的方法,创建内部类对象,调用内部类功能. 创建外部类对象,调用外部类方法。
方式二:直接调用:Person.Heart h = new Person().new Heart();
成员变量 外部类定义的成员变量,内部类直接访问 内部类定义的成员变量,外部类创建内部类对象进行访问的。
常见修饰符 private:将内部类保护起来,其他类不能直接访问,只能通过外部类的public的方法进行访问。
static:静态的 在内部类中定义静态变量非法 只能在静态内部类中定义静态成员 静态内部类创建方式:Person.Heart h = new Person.Heart(); 静态内部类中静态方法:Person.Heart.think();
匿名类
interface Skill { //必须要声明接口先,也算是接口的另一个用法吧,也可以是抽象类。不能是类,类可以直接实例化。
public void chang();
public void dance();
public void rap();
}
class Demo4 {
public static void main(String[] args) {
Skill s1 = new Skill() {
public void chang() {
System.out.println("我会唱歌");
}
public void dance() {
System.out.println("我会跳舞");
}
public void rap() {
System.out.println("我会rap");
}
};
s1.chang();
s1.dance();
s1.rap();
}
}
匿名内部类
1.
匿名内部类因为没有类名,可知匿名内部类不能定义构造器。
2.
因为在创建匿名内部类的时候,会立即创建它的实例,可知匿名内部类不能是抽象类,必须实现接口或抽象父类的所有抽象方法。
3.
匿名内部类会继承一个父类(有且只有一个)或实现一个接口(有且只有一个),实现父类或接口中所有抽象方法,可以改写父类中的方法,添加自定义方法。
4.
当匿名内部类和外部类有同名变量(方法)时,默认访问的是匿名内部类的变量(方法),要访问外部类的变量(方法)则需要加上外部类的类名。
5.
内部类可以访问外部类私有变量和方法。
6.
不能有static,因为只使用一次。可以有final,可以有static final
评论区