------- android培训、java培训、期待与您交流! --------
内部类
(1)把类定义在一个类的内部。
(2)特点:
A:内部类可以直接使用外部类的成员,包括私有。
B:外部类要使用内部类成员,必须创建对象使用。
(3)内部类的分类:
局部内部类:定义在方法中的内部类
成员内部类:定义在类中方法外的内部类
(4)成员内部类
class Outer {
class Inner {
}
}
普通的修饰的时候:
外部类名.内部类名 变量 = 外部类对象.内部类对象;
Outer.Inner oi = new Outer().new Inner();
class Outer {
static class Inner {
}
}
用静态修饰后:
外部类名.内部类名 变量 = 外部类名.内部类对象
Outer.Inner oi = new Outer.Inner();
成员内部类:
private:为了数据的安全。
static:为了方便调用。
(5)局部内部类
A:带名字的局部内部类
class Outer {
public void method() {
final int a = 10;
class Inner {
public void show() {
System.out.println("show");
System.out.println(a);
}
Inner i = new Inner();
i.show();
}
}
}
B:匿名内部类(掌握)
a:没有名字的内部类。其本质是一个对象。
b:前提:存在一个抽象类或者接口。
c:格式:
new 抽象类或者接口() {
重写父类方法;
};
本质:是一个继承了类或者实现了接口的子类匿名对象。
以下代码为局部内部类:
package cn.itcast;
/*
* 局部内部类
*/
public class Demo {
public static void main(String[] args) {
Outer out = new Outer();
out.method();
}
}
class Outer{
String name = "张三 ";
public void method(){
final String sex = "男";
class Inner{
private int age;
public void getOutName(){
System.out.println(name);
//System.out.println(age);
System.out.println(sex);
}
}
Inner in = new Inner();
System.out.println(in.age);
in.getOutName();
}
}
运行结果为:
0
张三
男
以下为匿名内部类代码:
package cn.itcast;
public class Demo2 {
public static void main(String[] args) {
Animal animal = new Animal() {
public void eat() {
System.out.println("八戒吃了");
}
};
animal.eat();
}
}
//抽象类
abstract class Animal{
String name;
public abstract void eat();
}
运行结果为:
八戒吃了