final,权限,内部类

final,权限,内部类

1.final

  • final: 不可改变。可以用于修饰类、方法和变量。
  • 类:被修饰的类,类的内容不能被更改,不能被继承,不能被子类覆盖重写。
  • 方法:被修饰的方法,不能被重写。

注意:abstract和final不能同时存在,因为一个必须被覆盖重写,一个不能被覆盖重写,不能共存。

  • 变量:被修饰的变量,不能被重新赋值。

局部变量:没有默认值,可以分两部赋值,但只能被赋值一次。

注意:对于基础型变量,数值不可改变

​ 对于应用型变量,地址不可改变

//第一种赋值方法
final int num;
num = 5;
//第二种赋值方法
final int num = 5;

成员变量:含有默认值0,但是使用final后就不再拥有默认值,只能一次手动赋值或者构造方法赋值,且必须所有重载的构造方法都必须进行赋值。

//手动赋值
final int num = 0;
//构造方法赋值
final int num;
public 类名(){
 this.num= num;
}

2.权限

publicprotecteddefaultprivate
同类(自己)YESYESYESYES
同包(邻居)YESYESYESNO
子类,不同包(儿子)YESYESNONO
不同包,不同类(陌生人)YESNONONO

总结:

  • 只能自己使用,private
  • 只能同包使用,默认不写
  • 只能子类使用,protected
  • 公共使用,public

3.内部类

3.1成员内部类

定义格式:

修饰词 class 外部类名称{
	修饰词 class 内部类名称{
	
	}
}

注意事项:

  1. 内用外,直接用
  2. 外用内,必须创造对象,使用方法调用
3.1.1 成员内部类的使用
  1. 间接使用:通过外部类方法,间接调用内部类

  2. 直接使用:创建内部类对象

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

3.1.2内部类变量重名的使用
  1. 局部变量:直接使用变量名
  2. 成员变量:this.变量名
  3. 外部变量:外部类名称.this.变量名

3.2局部内部类

  • 在类的方法中创建类

定义格式:

 内部类名称{
		
		}
	}
}
3.2.1局部内部类的调用
  • 由于局部内部类在方法内定义,只能在方法内部调用
  • 需要在方法内创建对象,然后在方法内由对象调用

3.3外部,内部类的权限使用

  • 外部类:public/不写(default)
  • 成员内部类:public>protected>default>private
  • 局部内部类:不写
3.3.1局部内部类访问局部变量
  • 局部内部类访问局部变量,必须保证局部变量是final类型,不可改变,在jdk8中,final可以省略

原因:由于局部变量在栈中,局部内部类在堆中,当方法执行完毕,局部变量出栈,但是栈中的局部变量需要等到垃圾回收才会消失,为了保证局部内部类得到的局部变量准确,局部变量不可以改变。.

3.4匿名内部类

  • 必须有一个父类(接口)

  • 当父类(接口)的实现类只需要使用一次时,可以使用匿名内部类对父类(接口)进行重写创建)

    定义格式:

    接口名称 对象名=new 接口名称(){
    	//覆盖重写的抽象方法
    }
    

    对代码进行解析:

    1. new代表创建对象的动作
    2. 接口名称就是匿名内部类需要实现哪个接口
    3. {…}这才是匿名内部类的内容

注意事项:

  1. 匿名内部类,在【创建对象】的时候,只能使用唯一一次。如果希望多次创建对象,而且类的内容一样的话,那么就必须使用单独定义的实现类了
  2. 匿名对象,在【调用方法】的时候,只能调用唯一一次.如果希望同一个对象,调用多次方法,那么必须给对象起个名字。
  3. 匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】,匿名内部类和匿名对象不是一回事!

4.使用类作为成员变量类型

  • 类也可以作为成员变量,例如String
  • 类作为成员变量传参时必须创建对象传入
  • 类作为成员变量传出参数是必须调用类的方法

5.使用接口作为成员变量类型

  • 接口也可以作为成员变量,需要先创建一个接口
  • 参数的传入可以使用实现类,也可以使用匿名对象

6.使用接口也可以作为参数和返回值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值