Java学习笔记(十二)

12.内部类

一个事物里面包含另外一个事物,那么这就是一类内部包含另外一个类

如:教室类里面包含了电脑类 汽车类 ->座椅

分类
1.成员内部类
2.局部内部类
3.匿名内部类
4.静态内部类

(1)成员内部类
格式

修饰符 class 内类名(){
    //代码
}

位置

外部类{
    内部类{
        内部类方法(){
        
       }
    }
    外部类方法(){
    
    }
}

 

代码

public class A{ //外部类
    public class B{ //内部类
        public void methodB(){ //内部类里的方法
           //内部类中的代码
        }
    }

    public void methodA(){ //外部类里的方法
        new B().methodB();//调用内部类中的方法
    }
}

 测试类main方法中

A.B b=new A().new B();//直接调用

A a=new A();//间接调用(在外部类方法中调用内部类的方法,再调用外部类方法)
a.methodA();

(2)调用内部类
直接调用:

外部类.内部类 类名=new 外部类().new 内部类();
A.B b=new A().new B();

间接调用:
先在外部类方法中调用内部类的方法,再调用外部类方法(例子在上面)

new 内部类().内部类方法();//外部类方法中
外部类 名称=new 外部类();
名称.外部类方法名

new B().methodB();//外部类方法中
A a=new A();//main方法中
a.methodA();

(3)局部内部类
在外部类方法内

位置

外类{
    外类方法(){
        局部内部类{
            内部类方法(){

            }
        }
    }
}

代码:

public class A{ //外部类
    public void methodA(){ //外部类方法
        public class B{ //局部内部类
            int num=1;
            public void methodB(){ //局部内部类方法

            }
        }
        //局部内部类只能在方法中使用
        B b=new B();
        System.out.println(inner.num);
        inner.methodB();
    }
}

注意:
局部内部类中不能使用public、protected、private修饰符
局部内部类只能在方法中使用

(4)匿名内部类
如果接口中的实现(或父类中的子类)只需要使用一次
那么这种情况可以忽略该类的定义,而使用匿名内部类的形式
格式

接口名/父类名 对象名=new 接口名(){
    //重写接口中的方法
}; //分号别忘

A接口类,B实现类
向上造型
A a1=new B();
a1.method();

因为要使用接口中的方法而不得不有一个实现类,必须要重写方法
从而造成代码浪费

匿名内部类

A a2=new A(){
    @Override
    public void method() {-->重写方法
            
    }
};
a2.methodA();调用方法

解释说明:new …
1、new 创建对象的动作
2、new 后面的接口名称表示一个类需要实现的接口
3、{代码} 这就是内部类的代码部分

注意:
1、匿名内部类,在创建对象的时候,只能使用一次
如果需要多次创建对象,而且类的内容一样的话,需要重新定义类文件

2、匿名对象,在调用的时候,只能调用一次

3、匿名内部类是省略了 子类/实现类,但是匿名的对象是省略了 对象名称
匿名内部类和匿名对象强调的不是一回事
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值