4-22 多态的应用(多态作为形参和返回值的情况)内部类的引入(成员内部类,局部内部类,静态内部类,匿名内部类)

本文深入探讨了多态在Java中的应用,包括作为形参和返回值的情况,以及内部类的各种类型和特点,如成员内部类、局部内部类、静态内部类和匿名内部类,强调了它们在提高类安全性和代码复用性方面的作用。

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

多态的应用——多态作为形参的情况

形式参数

	基本类型  满足类型转换的原则
	引用类型
		普通类
			当一个形参希望我们传入的是一个普通类时,我们实际上传入的是该类的对象 / 匿名对象
		
		抽象类
			当一个形参希望我们传入的是一个抽象类时,我们实际上传入的是该类的子类对象 / 子类匿名对象 / 匿名内部类
		
		接口
			当一个形参希望我们传入的是一个接口时,我们实际上传入的是该类的实现类对象 / 实现类匿名对象

注意:当一个方法的形参是引用类型的时候,建议养成一个好的习惯:做非空判断

多态的应用——多态作为返回值的情况

返回值类型

	基本类型
	引用类型
		普通类
			当一个方法的返回值是一个普通的类时,实际上返回的是该类的对象,我们可以使用该类的对象接受
		抽象类
			当一个方法的返回值是一个抽象类时,实际上返回的是该抽象类的子类对象,我们可以使用该抽象类接受
		接口
			当一个方法的返回值是一个接口时,实际上返回的是该接口的实现类对象,我们可以使用接口接收
			
当方法的返回值类型是引用类型的时候,可以使用链式调用
IStudent stu = new Istudent() {
	@Override
	public void study() {
		System.out.println("外界的study")
	}
}

内部类

	什么情况下外部不能够创建类的对象?
	抽象类
	接口
	构造方法全部私有
	内部类
	
	为什么需要学习内部类?
	提高类的安全性

内部类的概念:

	将类的定义的内部,那么该类就称为内部类
	注意:内部类是一个相对的概念:
		如果A中有一个B类,那么A类相对于B类来说就是外部类,那么B类相对于A类来说就是内部类

内部类的分类

	局部内部类
	成员内部类
	静态内部类
	匿名内部类

内部类的特点:

	内部类可以直接访问外部类的私有成员吗? 可以
	外部类可以访问内部类的成员?必须创建内部类的对象
	如果编译器编译生成字节码文件,那么内部类会不会生成.class文件,如果会的话,格式是?
		会生成,格式是:外部类类名$内部类类名.class
	如果在外界要访问内部类对象可以,可以是可以,但是内部类有一个缺陷,会造成类和类的耦合性过高,慎用

成员内部类

	格式:
		外部类类名,内部类类名  对象 = new 外部类类名.new 内部类对象

	
	一旦内部类成员加上private关键字,外界无法访问
	当外部类类名和内部类类名成员重名的时候如何访问?
	外部类类名.this.外部类成员

	
	内部类如何访问外部类成员  - - 直接访问
	外部类如何访问内部类成员 - - 不能直接访问,创建内部类的对象
	外界如果访问内部类成员
			外部类类名.内部类类名 对象 = new 外部类对象.new 内部类对象
	外界如何访问内部类私有成员
			无法访问,可以内部类提供对外的公共访问方式
	当外部类类名和内部类类名成员重名的时候如何访问 - - 外部类类名.this.外部类成员

局部内部类

	在局部的位置创建内部类对象,访问内部类成员
	在JDK1.8之前,如果局部内部类访问外部类成员,需要加final关键字

静态内部类

	格式:
		外部类类名.内部类类名 对象 = new 外部类对象.内部类类名();

	
	静态内部类中可以有静态成员和非静态成员
	访问非静态成员需要创建对象
	访问静态成员可以直接调用
			外部类类名.内部类类名.静态成员

	
	方便访问静态内部类的成员

匿名内部类

	概念:本质就是一个子类匿名对象

	
	特点:
		是一个子类匿名对象
			父类可以是普通类 抽象类 接口
		是一个对象
		没有名字的子类

	
	前提条件: 存在一个父亲(接口 / 抽象类 / 普通类)
	
	格式:
		没有对象名
		没有类名
		当时它是一个子类
		还是一个对象
		new 类名 / 接口名(){
				//重写方法
		}	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值