复习8:内部类

内部类

  • 内部类是什么
  • 内部类的类别
  • 成员内部类
  • 静态内部类
  • 匿名内部类

内部类是什么

示例

package day20191106;

public class InClass {
    /**
    *类似这种的类就叫做内部类,顾名思义,就是存在于类内部的另一个类
    */
	class InnerClass{
		
	}
}


内部类的类别

  • 成员内部类:地位相当于成员变量、成员方法

    • 内部类的使用与外部类相似,但需要注意的是内部类中不能有static修饰的内容
    • 内类中可以继续写内部类,但是一般不这么写
  • 静态内部类

  • 匿名内部类(最常见,最实用)

  • 局部内部类(已被淘汰)


成员内部类

成员内部类是什么

示例

package day20191106;

public class ClassExample {
	public class InnerClass{
        
        public InnerClass(){
            
        }
		public int a;
        public int b;
        
        public void method1(){
            
        }
        public void method2(){
            
        }
	}
}

成员内部类的构造
  • 有构造器
  • 有变量
  • 有方法
  • 有代码块
  • 可以使用外部类的属性和方法

注意:成员内部类中不能有static修饰的内容,因为成员内部类是对象内部的一个成员,对象被创建后才会有成员内部类

成员内部类的对象创建
  • 方式1
package day20191106;

//导入内部类
import day20191106.ClassExample.InnerClass;

public class Demo03 {
	public static void main(String[] args) {
        //创建外部类对象
		ClassExample classExample = new ClassExample();
        //使用外部类对象创建出内部类对象,方式与调用成员属性、方法相同
		InnerClass inner = classExample.new InnerClass();
	}
}

  • 方式2
package day20191106;


public class Demo03 {
	public static void main(String[] args) {
        
		ClassExample classExample = new ClassExample();
		ClassExample.InnerClass inner = classExample.new InnerClass();
	}
}

注意1:创建出内部类对象后,可以像普通对象一样调用内部的属性和方法


静态内部类

静态内部类是什么

static修饰的成员内部类,示例如下:

package day20191106;

public class ClassExample {
    
	public static class InnerClass{
        
        public InnerClass(){
            
        }
		public int a;
        public int b;
        
        public void method1(){
            
        }
        public void method2(){
            
        }
	}
}

静态内部类的特殊点

不能调用外部类的非静态属性、方法,其他与成员内部类相同

静态内部类的对象创建
package day20191106;

public class Demo03 {
	public static void main(String[] args) {
		InnerClassB innerB = new ClassExample.InnerClassB();
	}
}


匿名内部类

匿名内部类是什么

一次性使用的一个实例化对象

匿名内部类的作用

实现一个接口或者继承一个抽象类

匿名内部类的示例
package day20191106;

public class Demo03 {
	public static void main(String[] args) {
        
        //必须是抽象类或者接口
		InterClass interClass = new InterClass(){

			@Override
			public void method1() {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void method2() {
				// TODO Auto-generated method stub
				
			}
			
		};
	}
}

匿名内部类的使用
  • 可以使用局部变量,局部变量必须被final修饰
  • 可以使用成员变量,成员变量无须被final修饰

注意:

  • JDK1.8及以上版本:即使被调用的局部变量没有被final修饰,也会默认添加final
  • JDK1.8以下版本:必须写明局部变量由final修饰,否则无法调用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章