内部类

--------------------------Inner Class---------------------------      
1、Static Inner Class  静态内部类
   是成员内部类的一种。


   静态内部类中可以访问外部类静态成员,但不能访问外部类非静态成员
   
class Outer{
    static int index = 200;
    int a = 10;
    static class Inner{
    public void print(){
            System.out.println(index);   //不能访问a
        }
    }
}


public class TestStaticInner {
public static void main(String[] args) {
Outer.Inner in = new Outer.Inner();
   in.print();
}
}
   
 (1).静态内部类的实例不会自动持有外部类特定实例的引用,
在创建内部类的实例时,不必创建外部类的实例。
 (2).静态内部类可以直接访问外部类的静态成员。
 (3).在静态内部类中可以定义静态成员和实例成员。
 (4).用户可以通过完整的类名直接访问静态内部类的静态成员。
 


2、Member Inner Class  成员内部类


class Outer{
private int index = 200;
class Inner{
private int index = 100;
public void print(){
int index = 50;
System.out.println(index);            //50
System.out.println(this.index);       //100
System.out.println(Outer.this.index); //200
}
}
}
public class TestMemberInner {
public static void main(String[] args) {
Outer out = new Outer();
Outer.Inner in = out.new Inner();
in.print();
}
}


 (1).成员内部类不能有静态声明
 (2).须先有外部类对象,再有内部类对象
 (3).内部类可以访问外部类的私有成员


3、Local Inner Class   局部内部类


class Outer{
private int i1;   //非静态
    private static int i2;
    public void test1(int i3){
    final int i4 = 4;
    class Inner{
    public void test(){
    System.out.println(i1);
    System.out.println(i2);
    //System.out.println(i3);
    System.out.println(i4);
    }
    }
    Inner in = new Inner();
    in.test();
    }
}
public class TestLocalInner {
public static void main(String[] args) {
Outer out = new Outer();
out.test1(5);
}
}


 (1).局部内部类只能在当前方法中使用
 (2).局部内部类不能包含静态成员
 (3).局部内部类不能被public、proected和private这些关键字修饰,
 只能被abstract、final修饰
 (4).可以访问外部类的所有成员
 


4、Anonymous Inner Class  匿名内部类


interface Animal{
void eat();
}
public class TestAnonymousInner {
public static void main(String[] args){
System.out.print("请输入一个数字:");
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
Animal a=getAnimal(i);
a.eat();

feed(new Animal(){
public void eat(){
System.out.println("Tiger eat Sheep");
}
});
}
static Animal getAnimal(int a){
/*
class Dog implements Animal{
public void eat(){
System.out.println("Dog eat Bone");
}
}
class Cat implements Animal{
public void eat(){
System.out.println("Cat eat Fish");
}
}
if (a==0) return new Dog();
else return new Cat();
*/

if (a==0) return new Animal(){
public void eat(){
System.out.println("Dog eat Bone");
}
};
else return new Animal(){
public void eat(){
System.out.println("Cat eat Fish");
}
};
}
static void feed(Animal a){
a.eat();
}
}
----------------------------------------
interface IA{
public void m1();
}
public class Test {
public static void main(String[] args) {
IA ia = getIA();
ia.m1();
}

public static IA getIA(){
return 
new IA(){
public void m1() {
System.out.println("ttt");
}
};
}
}


适用场合:
a、类名字不重要时
b、只需要new一个对象
c、要实现接口,或者继承类





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值