补充一、java的内部类

1. 概述

如果一个类存在的意义就是为指定的另一个类,可以把这个类放入另一个类的内部。就是把类定义在类的内部的情况就可以形成内部类的形式。

A类中又定义了B类,B类就是内部类。B类可以当做A类的一个成员看待。

2. 特点

1、 内部类可以直接访问外部类中的成员,包括私有成员

2、 外部类要访问内部类的成员,必须要建立内部类的对象

3、 在成员位置的内部类是成员内部类

4、 在局部位置的内部类是局部内部类

3.结构

class A{//外部类
			public void show(){
				//局部内部类  -->  匿名内部类
				class C{
				}
			}
			//成员内部类 只为外部类服务  看做是外部类的一个特殊的成员
			class B{//内部类
			}
		}

4. 成员内部类

被private修饰

//测试内部类被private修饰
public class Test5_InnerClass2 {
    public static void main(String[] args) {
       //TODO 创建内部类对象,并执行show()
//     Outer2.Inner2 oi = new Outer2().new Inner2();//报错,Inner2已经被private了
       //3,测试被private的内部类的资源能否执行!
       new Outer2().test();
    }
}

class Outer2{
    //2,如果想要访问private的内部类,可以访问外部类提供的对应方法
    public void test() {
       //访问内部类方法
       new Inner2().show();
    }
   
    //位置在类里方法外--成员内部类
    //1,内部类可以被private修饰,但是外界无法直接创建对象了!
    private class Inner2{
       public void show() {
           System.out.println("Inner2.show()");
       }
    }
}

被static修饰

//测试内部类被static修饰
public class Test6_InnerClass3 {
    public static void main(String[] args) {
       // 创建内部类对象测试show()
//     Outer3.Inner3 oi = new Outer3().new Inner3();//报错,原因是Inner3是静态的内部类
      
 
       Outer3.Inner3 oi = new Outer3.Inner3();//Outer3.Inner3通过类名.调用类中的静态资源
       oi.show();
 
       Outer3.Inner3.show2();//调用静态内部类里的静态方法
    }
}

class Outer3{   
    //1,内部类被static修饰--随着类的加载而加载,会造成内存资源浪费,并不常用!
    static class Inner3{
       public void show() {
           System.out.println("Inner3.show()");
       }
       static public void show2() {
           System.out.println("Inner3.show2()");
       }
    }
}

5. 匿名内部类

匿名内部类属于局部内部类,并且是没有名字的内部类。

//测试匿名内部类

//TODO 创建匿名对象+匿名内部类测试
public class Test8_InnerClass5 {
    public static void main(String[] args) {
       new Hello() {// 匿名对象,本身接口不能new,这里new Hello()匿名对象,就相当于Hello接口的实现类
           // 匿名内部类
           @Override
           public void save() {
              System.out.println("save()..");
           }
 
           @Override
           public void update() {
              System.out.println("update()..");
           }
       }.update();// 触发指定的方法

       new Hello2() {//抽象类的匿名内部类
           @Override
           public void show() {  }
       }.show();
      
       new Animal() {//普通类的匿名内部类
           @Override
           public void eat() {   }
       };
    }
}

class Animal{
    public void eat() {}
}

abstract class Hello2 {
    abstract public void show();
    public void delete() {   }
}
 
// 定义接口
interface Hello {
    void save();
    void update();
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值