java 内部类 final关键字

内部类:在一个类的内部定义其他类的情况。

 

1) 内部类和外部类的私有属性可以互相访问

内部类要访问外部类的私有属性不需要实例化对象,外部类若要访问内部类的私有属性需要实例化对象。

在内部类中,如果想要表示外部类的当前对象,使用“外部类.this”来表示

 

2) 在外部实例化内部类对象的操作格式:

外部类.内部类 内部类对象 = new 外部类().new 内部类()

之所以实例化外部类对象是因为内部类需要访问外部类中的普通属性,而普通属性只有在实例化对象之后才可以使用。

 

3) 使用private定义私有内部类:一个内部类不希望被其他类所使用,可以使用private关键字将其定义为私有内部类。

 

4) 使用static定义内部类:在定义内部类时也可以使用static关键字,而使用static定义的内部类表示为外部类,且只能访问外部类中的static类型的操作。

若想要实例化用static定义的内部类:

外部类.内部类 内部类对象 = new 外部类.内部类();

 

5) 在类的普通方法中定义内部类

此时定义的内部类,如果想要访问方法的参数或方法中定义的变量时,这些参数或变量前面一定要增加一个final关键字,否则无法调用。

 

例1

public class inerOut {
	public static void main(String args[]){
		Outer out=new Outer();
		out.fun(30);
	}

}


class Outer{
	private String msg="hello world";
		public void fun(int x){
			String info="你好";
			class Inner{
				public void print(){
					System.out.println(Outer.this.msg);
					System.out.println(x);
					System.out.println(info);
				}
				
			}
		Inner in=new Inner();
		in.print();
	}
}

在例1中没有在方法的参数和方法内定义的变量之前加final关键字,也可以正常调用,我用的是java1.8.0

 

Ps:以下是别人的回答

java1.6 1.7都会编译出错.
Java 8的新特性,但其实只是让你方便一点,在你这个内部类里不加final效果等同于final 
比如,如果你想修改xinfo 
x = 100 
那么会告诉你: 
Local variable defined in an enclosing scope must be final or effectively final 
注意后面说的effectively final,就是说表面上没有final修饰,但实际上和final相同的效果

 

 

final关键字

在java中,final关键字表示的是一个终结器的概念,使用final可以定义类、方法、变量。

① 使用final定义的类不能有子类,即无法被别的类继承

② 使用final定义的方法不能被子类覆写

③ 使用final定义的变量就表示常量,常量在定义时必须设置默认值,且无法修改

如果使用public static来定义常量,那么这个常量就称为全局常量

如:public static final String INFO=”hello”;//全局常量



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值