1.四种权限修饰符
public > protected > (default) > private
同一个类 ✓ checkmark ✓ ✓ checkmark ✓ ✓ checkmark ✓ ✓ checkmark ✓
同一个包 ✓ checkmark ✓ ✓ checkmark ✓ ✓ checkmark ✓ × times ×
不同包子类 ✓ checkmark ✓ ✓ checkmark ✓ × times × × times ×
不同包非子类 ✓ checkmark ✓ × times × × times × × times ×
2.内部类
【1】概念:如果一个事物的内部包含另一个事物,那么这就是一个类内部包含另一个类
【2】分类:
(1)成员内部类
(2)局部内部类(包含匿名内部类)
3.成员内部类
【1】格式
修饰符 class 外部类名称 { 修饰符 class 内部类名称 { //... } //... } - 1
- 2
- 3
- 4
- 5
- 6
【2】注意:内用外,随意访问;外用内,一定要借助内部类对象
【3】使用:
(1)间接方式:在外部类的方法中,使用内部类;然后main只是调用外部类的方法
(2)直接方式:公式:
类名称 对象名 = new 类名称(); 外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称(); - 1
- 2
【4】同名变量的访问
(1)如果出现重名现象格式是:
外部类名称.this.外部类成员变量名- 1
4.局部内部类
【1】如果一个类定义在一个方法内部的,那么这个类就是一个局部内部类。
【2】“局部”:只有当前方法才能使用它,出了这个方法外就不能用了
【3】格式
修饰符 class 外部类名称 { 修饰符 返回值类型 外部类方法名称(参数列表){ class 局部内部类名称 { // ... } } } - 1
- 2
- 3
- 4
- 5
- 6
- 7
【4】final问题
局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是【有效final的】
原因:
(1)new的对象在堆内存当中
(2)但局部变量跟着方法走,在栈内存中
(3)方法运行结束后,立刻出栈,局部变量就会立刻消失
(4)new的对象会在堆中持续存在,直到垃圾回收为止
TIPS:
从java8开始,只要局部变量事实不变,那么final关键字可以省略
5.权限修饰符规则
【1】外部类:public/(default)
【2】成员内部类:都可以
【3】局部内部类:什么都不能写,和(defult)不同
6.匿名内部类
【1】如果接口的实现类(或者父类的子类)只需要使用唯一的一次,那么这种情况下,就可以省略掉该类的定义,改为使用匿名内部类
【2】格式
接口名称 对象名 = new 接口名称() { // 覆盖重写接口中所有抽象方法 }; - 1
- 2
- 3
TIPS:
【1】格式的解析:
(1)new代表创建对象的动作
(2)接口名称是匿名内部类需要实现哪个接口
(3){…}是匿名内部类的内容
【2】匿名内部类,在【创建对象】时,只能使用唯一的一次
如果希望多次创建对象,而且类的内容一样时,那么就必须使用单独定义的实现类
【3】匿名对象,在调用方法时,只能调用唯一的一次
如果希望同一个对象,调用多次方法,那么必须给对象起一个名字
【4】匿名内部类是省略了实现类(子类)
匿名对象是省略了对象的名称
这两是不是同一个东西!
7.接口作为成员变量类型
//1.使用单独定义的实现类,匿名对象 hero.setskill(new SkillImpl()); //2.使用匿名内部类 Skill skill = new Skill(){ @override public void use(){} }; hero.setskill(skill); //3.同时使用匿名对象和匿名内部类 hero.setskill(new Skill(){ @override public void use(){} }) ; - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
8.接口作为参数和返回值
java.util.List是ArrayList所实现的接口
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!