孙Cloud的Java学习博客-10.5-final关键字与内部类
这篇学习总结从final关键字开始
-
final概念及四种用法 final关键字有四种用法,即可以修饰一个类,一个方法,一个局部变量,一个成员变量 1.当他用于修饰一个类时,public final 类名称{//…} 含义为:这个类不能有任何子类(太监类) 注意:一个类如果是final的,那么其中所有成员方法都无法覆盖重写 2.用于修饰成员方法,那么这个方法就是最终方法,也就是不能覆盖重写 注意:对于类,方法来说abstract关键字与final关键字不能同时使用,因为矛盾 3.用于修饰局部变量,一旦赋值,终生不变(唯一一次赋值) 对于基本类型,不可变是数值不可变 对于引用类型,不可变是地址值不可变 4.用于修饰成员变量,如果使用final关键字修饰那么这个变量也是不可变的。 由于成员变量具有默认值,所以用了final之后必须手动赋值,不会再给默认值了 对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值 必须保证类当中所有重载的构造方法都最终对final的成员变量赋值
-四种权限修饰符 public > protected > (default) > private 同一个类 Yes Yes Yes Yes 同一个包 Yes Yes Yes No 不同包子类 Yes Yes No No 不同包菲子类 Yes No No No
-
内部类的概念与分类 如果一个事物的内部包含另一个事物,那这就是一个类内部包含另一个类(如身体与心脏的关系,汽车与发动机的关系) 分类1.成员内部类2.局部内部类(包含匿名内部类) 成员内部类 修饰符 class 类名称{ 修饰类 class 类名称{ }} 注意:内用外,随意访问,外用内,需要内部类对象 如何使用内部类 1.间接方式:在外部类的方法中,使用内部类,然后main只是调用外部类的方法。 2.直接方法 外部类名称.内部类名称 对象名 = new 外部类名称().内部类名称(); 内部类同名变量访问 如果出现了重名现象,那么格式是外部类名称.this.外部类成员变量名 局部内部类 如果一个类是定义在一个方法内部的,那么这就是一个局部内部类,这个局部类只有当前所属的方法才能使用它,出了这个方法外面就不能用了 格式…同上 定义一个类的时候,权限修饰符规则 1.外部类>>public>>(default) 2.成员内部类>>public > protected > (default) > private 3.局部内部类(什么都不写) 注意:如果局部内部类希望访问所在方法的局部变量,那个局部变量必须是【有效final的】:因为生命周期不一样 匿名内部类 如果接口的实现类(或者是父类的子类)只需要使用唯一一次,那么这种情况下就可以省略掉该类的定义,而使用【匿名内部类】 格式: 接口名称 对象名 = new 接口名称(){ …要覆盖重写所有抽象方法…} 注意:匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】因此两个不一样 类可以作为成员变量的类型 就像是int num ;Weapons weapons; 接口也可作为成员变量与方法参数与返回值!
