首页 > 其他分享 >内部类——成员内部类、静态内部类、接口内部类、局部内部类、匿名内部类

内部类——成员内部类、静态内部类、接口内部类、局部内部类、匿名内部类

时间:2024-04-01 10:31:04浏览次数:14  
标签:内部 System 接口 匿名 Inner println Outter public

//外部类
public class Outter {
	//1、成员内部类
	class A{}	
	//2、静态内部类
	static class B{}
	
	public void method(){
		//3、局部内部类
		class C{}
	}
}
public interface I1 {

	//4、接口内部类
	class D{}
}

1)成员内部类

  • 知识点:成员内部类

    • 特点:

      • 1.创建成员内部类对象之前,必须先创建外部类对象

      • 2.成员内部类可以调用外部类所有的属性

//创建成员内部类的对象
		Inner inner = new Outter().new Inner();//1.创建成员内部类对象之前,必须先创建外部类对象new Outter()
		
		inner.innerMethod();
		
//外部类
public class Outter {
	
	private 		String attr1 = "属性1";
					String attr2 = "属性2";//默认
	protected 		String attr3 = "属性3";
	public 			String attr4 = "属性4";
	final 			String attr5 = "属性5";
	static 			String attr6 = "属性6";
	static final 	String attr7 = "属性7";
	
	//成员内部类
	class Inner{
		
		String attr1 = "成员内部类属性";
		
		public void innerMethod(){
			System.out.println("成员内部类的方法");
			System.out.println(attr1);//就近原则,调用的是成员内部类的属性:attr1 = "成员内部类属性"
			System.out.println(Outter.this.attr1);//避开就近原则,调用的是外部类的属性:attr1 = "属性1"
			System.out.println(attr2);//Outter.this.attr2
            System.out.println(attr3);//Outter.this.attr3
			System.out.println(attr4);//Outter.this.attr4
			System.out.println(attr5);//Outter.this.attr5
			System.out.println(attr6);//Outter.attr6,静态属性用类名调用
			System.out.println(attr7);//Outter.attr7
		}
	}

2)静态内部类

  • 知识点:静态内部类

    • 特点:

      • 1.创建静态内部类对象之前,不用创建外部类对象

      •         //创建静态内部类的对象
        		Inner inner = new Outter.Inner();

      • 2.静态内部类只能调用外部类的静态属性

//外部类
public class Outter {
	
	static 			String attr1 = "属性1";
	static final 	String attr2 = "属性2";
	
	//静态内部类
	static class Inner{
		
		public void innerMethod(){
			System.out.println("静态内部类的方法");
			System.out.println(attr1);//Outter.attr1
			System.out.println(attr2);//Outter.attr2
		}
	}

3)接口内部类

  • 知识点:接口内部类

    • 特点:

      • 1.接口内部类类似于静态内部类 -- 创建对象的方式是一样的

      •         //创建接口内部类的对象
        		Inner inner = new Outter.Inner();

      • 2.接口内部类,系统默认使用public static修饰(接口内部类不能用private修饰了,而静态内部类可以用private修饰)

public interface Outter {
	
	//默认使用public static修饰
	class Inner{
		public void innerMethod(){
			System.out.println("接口内部类");
		}
	}

4)局部内部类

  • 知识点:局部内部类

    • 特点:

      • 1.方法以外不访问该类:局部内部类类似于方法里面局部变量,作用域在这个方法里面。所以局部内部类的特点是外界方法以外不能访问该类。所以外面不能创建对象

      • 2.局部内部类使用到外部类的局部变量时,JDK1.8开始该变量会自动变成常量,JDK1.8之前需要手动加上final

public class Outter {
	public void outterMethod(){		
		//局部内部类
		class Inner{
			public void innerMethod(){
				System.out.println("局部内部类");
			}
		}		
		//创建局部内部类对象
		Inner inner = new Inner();		
		inner.innerMethod();		
	}
public class Outter {
	public Object outterMethod(){		
		//num在Inner里使用到,该变量会自动变成常量,因为Java会考虑到该变量会在其他地方使用到,如果变量不变成常量,方法结束后会被回收
		int num = 100;	//num是局部变量,因为是外部类的outterMethod()方法里面的变量
		//局部内部类(在方法里面)
        class Inner{
			@Override
			public String toString() {
				return "局部内部类:" + num;
			}
		}		
		//创建局部内部类对象
		Inner inner = new Inner();
		return inner;
	}

5)匿名内部类

1、匿名内部类——类 步骤:

1.底层创建匿名子类,继承A类,重写method方法

2.创建匿名子类的对象

3.把匿名子类的对象地址 赋值给父类的引用(多态)

        A a = new A() {
			@Override
			public void method() {
				// TODO Auto-generated method stub
				
			}
		};	

 2、匿名内部类——接口 步骤:

1.底层创建匿名类,实现I1接口,重写method方法

2.创建匿名类的对象

3.把匿名类的对象地址赋 值给接口的引用(多态)

        I1 i1 = new I1() {
			@Override
			public void method() {
				// TODO Auto-generated method stub
				
			}
		};

 

标签:内部,System,接口,匿名,Inner,println,Outter,public
From: https://blog.csdn.net/m0_70135515/article/details/137222006

相关文章

  • GeminiDB Cassandra接口新特性FLASHBACK发布:任意时间点秒级闪回
    本文分享自华为云社区《GeminiDBCassandra接口新特性FLASHBACK发布:任意时间点秒级闪回》,作者:GaussDB数据库。技术背景数据库作为现代信息系统的核心组成部分,承担着存储、管理和检索大量数据的重要任务。然而,在实际的业务运行过程中,由于各种原因,数据库可能会出现异常或者故......
  • STM32和GD32内部时钟与外部时钟讲解
    STM32F103为例:1.当HSI被用作PLL时钟输入时,可以实现的最大系统时钟频率为64MHz。2.要使USB功能可用,必须同时启用HSE和PLL,并使USBCLK运行在48MHz。3.要实现ADC转换时间为1µs,APB2必须为14MHz、28MHz或56MHz。①.HSE=高速外部时钟信号②......
  • 【前端面试3+1】07vue2和vue3的区别、vue3响应原理及为什么使用proxy、vue的生命周期
    一、vue2和vue3的区别1.性能优化:        Vue3在性能方面有很大的提升,主要是通过虚拟DOM的优化和响应式系统的改进实现的。虚拟DOM重构:Vue3中对虚拟DOM进行了重构,使得更新算法更加高效,减少了更新时的开销,提升了性能。静态树提升:Vue3可以通过静态树提升技术......
  • 在Go语言中如何避免接口污染
            在设计和构造代码时,接口是Go语言的基石之一。然而,就像许多工具或概念一样,滥用它们通常不是一个好主意。接口污染就是用不必要的抽象使我们的代码变得难以理解。这是来自另一种编程语言具有不同习惯的开发人员经常犯的错误。在深入讨论这个话题之前,让我们重新思......
  • python(django)之单一接口管理功能后台开发
    1、创建数据模型在apitest/models.py下加入以下代码classApis(models.Model):Product=models.ForeignKey('product.Product',on_delete=models.CASCADE,null=True)#关联产品IDapiname=models.CharField('接口名称',max_length=100)apiurl=mod......
  • java的抽象类和接口
    抽象类:abstract,可以用此关键字修饰类和方法abstract修饰类就是抽象类,修饰方法就是抽象方法抽象类的注意事项,特点:抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类类该有的成员(成员变量,方法,构造器)抽象类也可以有抽象类的特点:抽象类不能创建对象,仅仅作为一种特殊的父......
  • 企业资料防泄密软件有哪些|三款好用企业内部文件防泄密软件
    刚刚看到一个新闻#美国电信巨头用户数据遭大规模泄露#据美国《华尔街日报》网站3月30日报道,美国电话电报公司称,在一起数据泄露事件中,约760万账户持有人和超过6500万前客户的个人信息被泄露到暗网。报道称,美国电话电报公司30日表示,该数据集包括姓名和社会保障号码等个人信息......
  • 接口文档神器apidoc
    1、apidoc介绍1、apidoc是什么?api文档生成工具:基于源代码备注创建的接口文档;2、apidoc优势是啥?超简单文档生成器:几乎支持目前主流的所有风格的注释,如可在C#、Go、python、Java、JavaScript、PHP等语言中使用。便于管理和查看:有利于代码的阅读同时,也减轻文档编写工......
  • 为什么Java接口接收请求整型数据需要使用包装类Long
    在Java中,接口(Interface)是抽象方法的集合,它定义了对象之间交互的契约。但是,接口本身并不直接处理数据。当你说“Java接口接收请求整型数据需要使用包装类Long”,我猜你可能是指在某个方法签名中,接口定义了一个接收Long类型参数的方法,而不是基本类型int。原因主要有以下几点:可......
  • 羡青山有思,Java有接口
    本篇会加入个人的所谓‘鱼式疯言’❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......