【2018-8-19】【day11】

【2018/8/19】

 

  1. Final关键字代表最终、不可改变的。

常见的四种用法:

  1. 可以用来修饰一个类。Public final class 类名称{ // }【当前类不能有任何子类,其中所有的成员方法都不能进行覆盖重写。】
  2. 可以用来修饰一个方法。这个方法就是最终方法,不能被覆盖重写。修饰符 final  返回值类型 类名(参数列表){}【对于类、方法来说,abstract关键字和final关键字不能同时使用。】
  3. 可以用来修饰一个局部变量。【对于基本类型来说,不可变说的是变量当中的数值不可变。对于引用类型来说,不可变指的是变量当中的地址值不可变。】
  4. 可以用来修饰一个成员变量。【由于成员变量具有默认值,所以用了final关键字之后必须手动赋值,不会再给默认值了。要么直接赋值,要么通过构造方法进行赋值。[二者选其一]必须保证类当中所有重载的构造方法,都最终会对final的成员变量进行赋值。】
  1. Java四种权限:

public>protected>(default)>private

[访问权限]

同一个类:      yes     yes     yes     yes(我自己)

用一个包:      yes     yes     yes     no(我邻居)

不同包子类:    yes     yes     no      no(我儿子)

不同包非子类:  yes     no      no     no(陌生人)

 

  1. 内部类:
  1. 成员内部类
  2. 局部内部类(包含匿名内部类)

成员内部类的定义格式:

修饰符 class 外部类名称{

修饰符class 内部类名称{

   //

}

}

注意:内用外,随意访问,外用内,需要借助内部类对象。

 

使用成员内部类:

  1. 在外部类的方法当中,使用内部类。然后main只调用外部类的方法。
  2. 直接方式:公式:

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

例如:MyClass.Heart heart = new MyClass().new Heart();

        heart.beat();

package yap11;

public class Outer {
    int num  = 10;
    public class Inner{
        int num = 20;
        public void methodInner(){
            int num = 30;
            System.out.println(num);//10
            System.out.println(this.num);//20
            System.out.println(Outer.this.num);//10
        }
    }
}

 

 

局部类:

修饰符 class 外部类名称{

   修饰符 返回值类型  外部类方法名称(参数列表){

   //…

}

}

局部内部类:

Class 类名{

    //…

}

  1. 局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是【有效final的】

原因:

  1. New出来的对象在堆内存当中。
  2. 局部变量是跟着方法走的,在栈内存当中。
  3. 方法运行结束之后,立刻出栈,局部变量立刻消失。
  4. 但是new出来的对象就会在堆当中持续存在,直到垃圾回收消失。
  1. 匿名内部类:

如果接口的实现类(或者父类的子类)只需要使用唯一的一次。

那么这种情况下就可以省略掉该类的定义,改为使用匿名内部类。

 

定义格式:

接口名称 对象名 = new 接口名称(){

   //覆盖重写所有抽象方法

};

 

package yap11;

public class demo {
    public static void main(String[] args) {
    //    MyInterface obj = new MyInterfaceImpl();
    //    obj.method();

        MyInterface obj = new MyInterface() {
            @Override
            public void method() {
                System.out.println("匿名内部类。");
            }
        };
        obj.method();
    }
}

注意:

  1. 匿名内部类,在创建对象的时候,只能使用唯一一次。

如果希望多次创建对象,而且类的内容一样的话,那么久必须使用单独定义的实现类了。

  1. 匿名对象,在调用方法的时候,只能调用唯一一次。

如果希望同一个对象,调用多次方法,那么必须给对象起个名字。

  1. 匿名内部类是省略了实现类/子类名称,但是匿名对象是省略了对象名称。

匿名内部类和匿名对象不是一回事。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值