day 11 final、权限、内部类

目录

 

final

修饰对象:

1、局部变量

2、局部变量之引用类型

3、成员变量

权限

内部类

成员内部类

访问

匿名内部类

使用方法:


final

代表不可修改的内容

修饰对象:

类:不可被继承。

方法:不可重写。

变量:不可修改。

1、局部变量

只能被赋值一次

两种情况下的判断正误:

final int c = 0;
for (int i = 0; i < 10; i++) 
{ 
    c = i; System.out.println(c);
}
for (int i = 0; i < 10; i++) 
{ 
final int c = i; 
System.out.println(c); 
}

第一种写法会报错,而第二种相当于每次循环重新申明一个新变量。

2、局部变量之引用类型

被final修饰后,只能指向一个对象,地址不能更改,但不影响内部成员变量的赋值

public class FinalDemo2 { 
    public static void main(String[] args) { 
        // 创建 User 对象 
        final User u = new User(); 
        // 创建 另一个 User对象 
        u = new User(); // 报错,指向了新的对象,地址值改变。 
        // 调用setName方法 
        u.setName("张三"); // 可以修改 
    } 
}

3、成员变量

成员变量的初始化。有两种方式。

注意:被final修饰的变量,通常大写。

public class User { 
    final String USERNAME = "张三"; 
    private int age; 
}
public class User { 
    final String USERNAME ; 
    private int age; 
    public User(String username, int age) { 
        this.USERNAME = username; 
        this.age = age;
    } 
}

权限

内部类

一个类定义在另一个类中

成员内部类

定义在类中方法外的类

在描述事物时,若一个事物内部还包含其他事物,就可以使用内部类这种结构。比如,汽车类 Car 中包含发动机
Engine ,这时, Engine 就可以使用内部类来描述,定义在成员位置。
class Car { //外部类
    class Engine { 
        //内部类 
    } 
}

访问

内部类可以直接访问外部类的成员,包括私有成员。
外部类要访问内部类的成员,必须要建立内部类的对象。
public class Person { 
    private boolean live = true; 
    class Heart { 
        public void jump() { // 直接访问外部类成员 
            if (live) 
            { 
                System.out.println("心脏在跳动"); 
            } else { 
                System.out.println("心脏不跳了"); 
            } 
        } 
    }
    public boolean isLive() { 
        return live; 
    }
    public void setLive(boolean live) {
    this.live = live; 
    } 
}

注:

内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的 .class 文件,但是前面冠以外部类的类名
$ 符号 。
比如, Person$Heart.class
 

匿名内部类

是内部类的简化写法。它的本质是一个 带具体实现的 父类或者父接口的 匿名的 子类对象
开发中,最常用到的内部类就是匿名内部类了。以接口举例,当你使用一个接口时,似乎得做如下几步操作,
1. 定义子类
2. 重写接口中的方法
3. 创建子类对象
4. 调用重写后的方法
我们的目的,最终只是为了调用方法,那么能不能简化一下,把以上四步合成一步呢?匿名内部类就是做这样的快
捷方式。

使用方法:

public abstract class FlyAble{ 
    public abstract void fly(); 
}
使用方法1:
使用方法2:
使用方法3:
 

猜你喜欢

转载自blog.csdn.net/qq_42499471/article/details/108921626
今日推荐