java内部类总结

前言:通过对内部类的了解与学习,可以知道每个内部内都能独立的继承一个接口,不论外部类是否继承。因此内部类是多重继承的解决方案更加完整,且匿名内部类会使代码更加简洁,又起来更方便,但是只能使用一次。

内部类概念:       在B类内部定义A类,A类就属于B的内部类
内部类访问外部类的特点: 它可以直接访问外部了的成员,包括私有
外部类访问内部类的特点:     通过创建内部类对象的方式间接访问...  
内部类的分类: 成员内部类:在外部类的成员位置

  局部内部类:在外部类的局部位置

                        匿名内部类:在外部类的局部位置

                        静态内部类:在外部类的成员位置

一.成员内部类 : 可以直接访问外部类的成员,包括私有。

外部类要访问内部类(非静态的内部类)的成员方法:
  格式:外部类名.内部类名 对象名 =new 外部类对象.new内部类对象
成员内部类的修饰符: private:  作用:保证数据的安全性!
                  static修饰:可以把静态内部类看成是外部类的成员.

举例:  

class Outer3{
	//外部类的成员变量
	private int num = 10 ;
	
	//成员内部类
	class Inner3{
		//show()
		public void show() {
			System.out.println(num);
		}
	}	
}
//测试类
public class OuterDemo3 {
	
	public static void main(String[] args) {
		//	格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象
		Outer3.Inner3 oi = new Outer3().new Inner3();
		oi.show(); 
	}
}

二.局部内部类:    可以访问外部类的成员包括私有...
                在外部类的局部位置去访问内部类的show(),需要在局部位置创建内部了对象,通过对象去访问

注释:局部内部类在调用外部局部变量是必须加上final修饰,

举例:

class Outer5{
	private int num = 10 ;
	//定义外部类的成员方法
	public void method() {
		//变量
		final int num2 = 20 ;  //jdk1.8不会有问题..
		
		//定义局部内部类
		class Inner5{
			public void show() {
				System.out.println(num);
				//注意事项:在这块改变量继续被使用...将变量变成固定值:在内存始终存在(被内部类的成员去使用)
				System.out.println(num2); 
			}
		}
		
		//创建对象
		Inner5 i = new Inner5() ;
		i.show();  //调用show()
	}
}
public class OuterDemo5 {
	public static void main(String[] args) {	
		//创建对象
		Outer5 o = new Outer5() ;
		o.method();
	}
}

三.匿名内部类:    前提是有一个类或者接口
            这个类可以是具体类也可以是抽象类
格式:new 类名或者接口名{
  方法重写();

  }  

注释:如果重写的方法只有一个,直接在类后面调用,如果有多个,给匿名类一个名字,分别调用。

匿名内部类的本质:      是继承了该类或者实现了该接口子类对象...
匿名内部类面试题: 按照要求,补齐代码
interface Inter { void show(); }
class Outer { //补齐代码 }
class OuterDemo {
public static void main(String[] args) {
 Outer.method().show();
 }
}

要求在控制台输出”HelloWorld”

/**interface Inter { void show(); }
			class Outer { //补齐代码 }
			class OuterDemo {
				public static void main(String[] args) {
					  Outer.method().show();
				  }
			}
			要求在控制台输出”HelloWorld”
 * @author 田伟
 *
 */
interface Inter { 
	void show();
	}
class Outer { 
	public static Inter method() {
	return new Inter(){
		@Override
		public void show() {
			System.out.println("Hello World");
		}	
		};
	}
}
public class Text {
	public static void main(String[] args) {
		  Outer.method().show();
	  }
}

四.静态内部类: 静态成员内部类访问外部类的数据,该数据必须static修饰  

格式:外部类名.内部类名 对象名=new 外部类名.内部类名();把静态的成员内部类看成是外部类的成员

举例

class Outer4{
	private int num = 10 ;
	private static int num2 = 100 ;
	
	//成员内部类:静态的
	static class Inner4{
		//成员方法
		//非静态的内部类成员方法
		public void show() {
			System.out.println(num2);
		}			
		//静态的内部类的成员方法
		public static void show2() {
			System.out.println(num2);
		}
	}
}
//测试类	
public class OuterDemo4 {
	public static void main(String[] args) {	
		//对于静态的成员内部类的访问格式
//外部类名.内部类名 对象名 = new 外部类名.内部类名() ; //把静态的成员内部类看成了外部类的成员
		Outer4.Inner4 oi =  new Outer4.Inner4() ;
		oi.show();
		oi.show2();
		
	}
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值