zoukankan      html  css  js  c++  java
  • JAVA_SE基础——51.内部类

    在Java中,允许在一个类的内部定义类,这样的类称作内部类,这个内部类所在的类称作外部类。根据内部类的位置、修饰符和定义的方式可分为成员内部类、静态内部类、方法(局部内部类)内部类。


    内部类:一个类定义在另外一个类的内部,那么该类就称作为内部类。

    内部类的class文件名: 外部类$内部类.  好处:便于区分该class文件是属于哪个外部类的。




    成员内部类


    在类中除了可以定义成员变量、成员方法,还可以定义类,这样的类被称作成员内部类。

    成员内部类的访问方式:

    方式一:在外部类提供一个方法创建内部类的对象进行访问。code1使用此方式

    方式二:在其他类直接创建内部类的对象。code2使用此方式

    格式:外部类.内部类  变量名 = new 外部类().new 内部类();


    code1

    class A{
    	int num = 10 ;
    	//下面的代码定义了一个成员方法,方法中访问内部类
    	public void test(){
    		B a = new B() ;
    		a.show() ;
    	}
    	//下面的代码定义了一个成员内部类
    	class B{
    		public void show(){
    			System.out.println("num = "+num) ;
    		}
    	}
    }
    class Demo1{
    
    	public static void main(String[] args) {
    		A a = new A() ;
    		a.test() ;
    	}
    }
    运行结果:

    num = 10


    code2

    class A{
    	int num = 10 ;
    	
    	//下面的代码定义了一个成员内部类
    	class B{
    		public void show(){
    			System.out.println("num = "+num) ;
    		}
    	}
    }
    class Demo2{
    
    	public static void main(String[] args) {
    		A.B a = new A().new B() ;
    		a.show() ;
    	}
    }
    运行结果:

    num = 10



    内部类的好处:内部类可以直接访问外部类的所有成员。





    静态内部类

    可以使用static关键字来修饰一个成员内部类,该内部类被称作静态内部类,它可以在不创建外部类对象的情况下被实例化(因为静态内部类随着外部类的加载而加载)。


    静态内部类,在其他类创建 的格式:

    外部类.内部类  变量名 = new 外部类.内部类();  code3使用此方式

    code3

    class A{
    	//定义静态成员变量
    	static int num = 10 ;
    	
    	//下面的代码定义了一个静态内部类
    	static class B{	
    		public void show(){
    			System.out.println("num = "+num) ;
    		}
    	}
    }
    class Demo3{
    
    	public static void main(String[] args) {
    		A.B a = new A.B() ;
    		a.show() ;
    	}
    }

    运行结果:

    num = 10


    P.S.

    在静态内部类中只能访问外部类的静态方法,如果将外部类的静态成员num的static关键字去掉,将会报错

    在静态内部类中可以定义静态的成员,而在非静态的内部类中不允许定义静态的成员。(因为内部类中的静态成员随着内部类的加载而加载,但是这样违背了当初sun公司定义的:静态的成员数据是不需要对象存在才能访问。





    方法内部类(局部内部类)

    方法内部类是指在成员方法中定义的类,它只能在当前方法中被使用。

    局部内部类: 在一个类 的方法内部定义另外一个类,那么另外一个类就称作为局部内部类。
    局部内部类要注意的细节:

    局部内部类可以访问外部类的成员变量、code4实现了此句话


    如果局部 内部类访问了一个局部变量,那么该局部变量必须使用final修饰(java1.8以下 局部变量没有用final修饰会报错)、  (我的java1.8  试验过了,没有final也不会报错,估计优化了吧。。微笑



    code4

    class A{
    	int num = 10 ;
    	
    	//下面的代码定义了一个成员内部类
    	public void test(){
    		
    		class B{
    			public void show(){
    				System.out.println("num = "+num) ;
    			}
    		}
    	//由于B类是方法内部类,因此只能在方法中创建该类的实例对象并调用show()方法、
    		B b = new B() ;
    		b.show() ; 
    	}
    
    }
    class Demo4{
    
    	public static void main(String[] args) {
    		A a = new A() ;
    		a.test() ;
    	}
    }
    
    运行结果:

    num = 10


    在A类的test()方法中定义了一个内部类B ,由于B类是方法的内部类,因此程序只能在方法中创建该类的实例对象并调用show()方法。 从结果上看,方法内部类可以访问外部类的成员变量。

    看完本章节觉得对自己都帮助的,写个评论顶顶大笑

  • 相关阅读:
    mysql 用命令行复制表数据到新表
    mysql 表存储位置更改
    mysql 配置延迟复制
    kvm添加网卡
    kvm启动报错Could not access KVM kernel module: Permission denied
    Slave SQL thread retried transaction 10 time(s) in vain, giving up. Consider raising the value of t
    安装tomcat
    mysql 启动报错
    xtrabackup安装及全备,增量备份,及恢复
    mysql gtid 配置
  • 原文地址:https://www.cnblogs.com/Jhaiha0/p/8465290.html
Copyright © 2011-2022 走看看