面向对象之内部类

本文探讨了Java中内部类的相关概念,包括权限修饰符的权限问题、包中的编译运行、引用类型的参数和返回值、内部类的多种形式以及在面试中的常见问题。同时,还介绍了匿名内部类的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.权限修饰符的权限问题

分别阐述一下四个权限修饰符在不同情况下的访问权限问题?

	private(私有的):只能在同一个包下的本类中使用
	默认修饰符:只能在同一个包下的本类和子类中使用
	piotected(受保护的):可以再同一个包下的本类和子类中,也可以在不同包下的子类中	
	public(公共的,访问权限最大):在相同包中和不同包中都可以使用

2.包中的编译运行

描述下在同一个包下和在包下针对Java源文件进行编译和运行的过程
	
	在同一个包下:
		手动:
			1)先进入到xxx.java文件所在的目录中,使用javac对java源文件进行编译,会产生xxx.class文件
			2)手动方式创建对应包目录,
			3)1)编译后的 xxx.class文件放在2)中的子文件夹中
			4)运行(带上包运行)
		自动:
			1)针对源文件进行编译,javac -d(跟上参数).java源文件,class文件存储到指定的包下
			2)直接运行即可,java 包名.类名
	在不同包下:
			1)将当前被导入的类进行编译
			2)进入到当前目录下
			3)直接运行java包名.类名

3.形式参数与返回值是引用类型

形式参数如果是具体类,抽象类,以及接口类型,实际参数如何传递
	
	  形式参数是具体类:实际参数需要传递具体类的对象
	  形式参数是抽象类:实际参数需要传递该抽象类的具体实现子类对象
	  形式参数是接口:实际参数需要传递接口类具体子实现类对象
          
          
返回值是具体类,抽象类,以及接口类型,该方法如何返回?          
	  返回值是具体类:需要返回该具体类对象
	  返回值是抽象类:需要返回该抽象类的具体实现子类对象
	  返回值是接口:需要返回该接口的具体子实现类对象

4.内部类问题

访问的方式:
        内部类的成员直接可以访问外部类的成员包括私有!

        外部类的成员向访问成员内部类的成员的时候,不能直接访问,而要通过内部类对象访问
		
想访问外部类中的成员内部类的成员方法的访问方式:
 
  	固定格式:
    外部类名.内部类名 对象名  = 外部类对象.内部类对象;
    
    
    
成员内部类中的修饰符:
		private:保证的数据安全性
  

static修饰: 有什么特点?
  
  		将静态的成员内部类看成是外部类的静态成员!
  
  		静态的成员内部类的成员方法(静态的还是非静态),只能访问外部类的静态成员!
 
         如果成员内部类是一个静态的,通过外部类访问静态的成员内部类的成员方法,访问方式:
        外部类名.内部类名 对象名  = new 外部类名.内部类名() ;
 
 
静态的内部成员类:
 	外部类名.内部类名 对象名  = new 外部类名.内部类名() ;

5.内部类的另一种形式

内部类另一种形式:
  		局部内部类:在局部位置中定义的类
  
   局部内部类的成员可以直接访问外部类的成员,包括私有
  
   外部类成员方法如何访问局部内部类的成员?
   在当前外部类的成员方法中,只需要创建内部类对象调用它的方法
  

6.面试题

局部内部类访问局部变量的时候,为什么JDK7(JDK7以前,包含JDK7版本)将局部变量使用final修饰?
  								JDK8版本已经局部变量做了优化(已经定义了final修饰)
  
局部变量的生命周期:随着方法调用而存在,随着方法调用完毕而消失,
    由于当前局部内部类中的成员方法还在使用局部变量,间接通过了外部类的成员方法中创建内部类对象
    访问内部类的成员方法---访问局部变量,对象不会立即被回收,需要等待GC空闲时候回收,内部类的成员方法
    还在访问,需要将当前局部变量定义为常量---内存中固定值!

7.匿名内部类

匿名内部类:
 		它是内部类的一种简化格式
    没有具体类名
  
格式:
  		new 类名(抽象类类名)/接口名(){
  
  				重写方法....
  		};
  举例:
  		new Person(){  //Person:抽象类   
  				//重写方法
  				public void love() {
  						...
 				}
  		} ;
  
  
  
匿名内部类的本质:
  	就是继承该抽象类或者实现了该接口的子类对象!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值