内部类的定义
所谓内部类就是在一个类内部进行其他类结构的嵌套操作。
成员内部类
顾名思义,成员内部类就是在一个已知类的成员部位创建一个内部类
class Outer{
public int num = 100;
class Inter{//创建一个局部内部类
public void method(){
int num = 10;
System.out.println(num);
}
}
}
class Test{
public static void main (String[] args){
Outer.Inter oi = new Outer().new Inter();//局部内部类的对象创建方法格式 外部类.内部类 对象名 = new 外部类().new 内部类();
oi.method();//结果为10()想取100,使用this.num
}
}
局部内部类
成员方法中的内部类
class Outer{
public int num = 100;
public void method(){
class Inter{//在成员方法中设置一个内部类成为局部内部类
public void show() {
System.out.println("你好呀~~~!!");
}
}
Inter i = new Inter();
i.show();
}
}
class Test{
public static void main (String[] args){
Outer o = new Outer();
o.method();
}
}
匿名内部类
在使用抽象类或者接口作为参数或者返回值是经常使用
public abstract class Animal {
public abstract void eat();
public abstract void sleep();
}
public abstract class Dog extends Animal {
public abstract void eat();
public abstract void sleep();
}
public abstract class Cat extends Animal {
public abstract void eat() ;
public abstract void sleep() ;
}
public class People {
public Dog method(){//返回值是引用类型使用匿名内部类
return new Dog() {
public void eat(){
System.out.println("狗吃骨头");
}
public void sleep() {
System.out.println("趴着睡");
}
};
}
public void show(Animal a) {//参数是引用类型,使用匿名内部类
a.sleep();
a.eat();
}
}
//测试类
public class Test {
public static void main(String[] args) {
People p = new People();
Dog d = p.method();
d.sleep();
d.eat();
p.show(new Cat() {//此处参数为引用类型,而Animal是一个抽象类,不能直接实例化,所以使用多态的方法,父类引用指向子类对象,重写子类方法并且创建一个子类对象。
public void eat() {
System.out.println("猫吃猫粮");
}
public void sleep() {
System.out.println("躺着睡");
}
});
}
}