• java 内部类


    内部类

    在这里插入图片描述

    java中允许将一个类A声明在类B中,则类A就是内部类,类B就是外部类
    内部类的分类:成员内部类 vs 局部内部类

    成员内部类

    一方面,作为外部类的成员:

    可以调用外部类的结构
    可以被static修饰
    可以被四种不同的权限修饰

    另一方面,作为一个类:

    类内可以定义属性、方法、构造器等
    使用final修饰,表示类不能被继承,言外之意,不使用final就可以被继承
    可以被abstract修饰

    1.如何实例化成员内部类的对象
    2.如何在成员内部类中区分调用外部类的结构
    3.开发中局部内部类的使用

    实例化静态内部类的时候可以直接new,非静态的话不能直接New要先创造外部类,因为非静态不会随着类的加载而加载

    1和2 如下代码

    package lei;
    
    public class innerClassTest {
    	public static void main(String[] args) {
    		//创建dog实例(静态的成员内部类)
    		Persontwo.Dog dog = new Persontwo.Dog();
    		dog.show();
    	
    		// 创建bird实例(非静态的成员内部类)
    		Persontwo p =  new Persontwo();
    		Persontwo.Bird bird = p.new Bird();
    		bird.sing();
    		bird.display("黄鹂");
    	}
    }
    
    class Persontwo{
    
    	String name = "小明";
    	int age;
    
    	public void eat(){
    		System.out.println("人吃饭");
    	}
    
    	// 静态成员内部类
    	static class Dog{
    		String name;
    		int age;
    	
    		public void show(){
    			System.out.println("我是一条狗");
    		
    		}
    	}
    
    	// 成员内部类
    	class Bird{
    		String name = "小鸟";
    	
    		public Bird(){
    		
    		}
    	
    		public void sing(){
    			System.out.println("我是一只小小鸟");
    			eat();
    		}
    	
    		public void display(String name){
    			System.out.println(name);  // 形参
    			System.out.println(this.name); // 内部类的属性
    			System.out.println(Persontwo.this.name); // 外部类的属性
    	}	
    	}
    
    
    
    	public void method(){
    		//局部内部类
    		class AA{
    		
    		}
    	}
    
    	{
    		// 局部内部类
    		class BB{
    		
    		}
    	}
    
    	public Persontwo(){
    		// 局部内部类
    		class CC{
    		
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79

    3.代码如下

    package lei;
    
    // 局部内部类的使用
    public class innerClassTest2 {
    	// 开发中很少见
    	public void method(){
    		//局部内部类
    		class AA{
    		
    		}
    	}
    
    	// 返回一个实现了Comparable接口的对象
    	// 方式一:标准
    	public Comparable getComparable(){
    	
    		// 局部内部类,创建一个实现Comparable接口的类
    		class MyComparable implements Comparable{
    
    			@Override
    			public int compareTo(Object arg0) {
    				// TODO Auto-generated method stub
    				return 0;
    			}
    		
    		}
    	
    		return new MyComparable();
    	
    		// 方式二 
    		return new Comparable(){
    			@Override
    			public int compareTo(Object o) {
    				// TODO Auto-generated method stub
    				return 0;
    			}
    		
    		}
    	
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
  • 相关阅读:
    jQuery学习:属性
    list分组成map这样做更简单
    对比Excel学openpyxl系列之设置excel数字和条件格式
    html小结
    什么是革命性技术eBPF?为什么可观测性领域都得用它
    智能指针
    第九章:注解
    Selenium 三种等待方式详解 (强制等待、隐式等待、显示等待)
    Pointpillar 论文解读
    2023年09月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 原文地址:https://blog.csdn.net/abc1234564546/article/details/127605473