面向对象(权限修饰符 / 内部类与匿名内部类)

一、权限修饰符

  Java提供public、protected、默认、private 4种访问控制符,在类、成员变量、成员方法的前面可以使用访问控制符关键字,没有显示使用的均为默认控制类型。

1. public

  public 访问权限最具开放性。修饰为 public 的类可以被其他任何类及成员访问和引用。简单来说就是由 public 修饰的类或者类成员可以被任何类访问,其既可以位于同一个包中,也可以位于不同包中。

2. protected

  protected 可以用来修饰类的成员变量或方法。被它修饰的类成员可以被本类、本包中的其他类和其他包中的子类访问。

3. 默认

  如果在定义类、接口、成员变量、成员方法时没有指定访问权限控制符,其权限就为默认权限。默认的时候只能被本类和同一个包中的其他类。

4. private

  私有访问控制 private 用来声明类的私有成员,它提供了最高保护级别。被它修饰的成员变量或方法只能被该类自身所访问和修改。
  上述4种访问权限控制符可访问权限总结如下表:

本类本包不同包中的子类不同包中的所有类
private
默认
protected
public

二、内部类

  Java支持在一个类中声明另一个类,这样的类称为内部类,而包含内部类的类称为外部类。内部类一般来实现一些没有通用意义的功能逻辑。内部类的使用要依赖于外部类。
  定义内部类比较简单,只需将类的定义放在一个用于封装它的外部类的类体内部即可。根据位置不同可以分为成员内部类和局部内部类。在成员位置定义的类称为成员内部类,定义在局部位置的类称为局部内部类。在测试类中访问内部类的格式为:
外部类名.内部类名 对象名 = 外部类对象.内部类对象
  在内部类中可以随意访问外部类的成员方法和成员变量,尽管这些类成员被修饰为private。成员被静态修饰后的访问方式是:
外部类名.内部类名 对象名 = new 外部类名.内部类名();
  局部内部类可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能;并且局部内部类访问局部变量必须用final修饰,因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立马从堆内存中消失,还要使用那个变量。为了让数据还能继续被使用,就用fianl修饰,这样,在堆内存里面存储的其实是一个常量值。

三、匿名内部类

  匿名内部类就是局部内部类的简单写法,匿名内部类的前提是有一个类或者接口(类可以是抽象类)。匿名内部类的实现代码为:

new A(){
    重写方法;
};

  匿名内部类的本质是一个对象(继承了该类或者实现了该接口的匿名对象)。与类有关的匿名类举例如下:

abstract class Student{
    abstract void speak();
}
class Teacher{
    void look(Student a){
        a.speak();
    }
}
public class Ex5 {
    public static void main(String[] args) {
        Teacher zhang=new Teacher();
       Student liu=new Student() {
            @Override
            void speak() {
                System.out.println("这是匿名类中的方法");
            }
        };
        zhang.look(liu);
    }
}

  程序运行结果如下:
  这是匿名类中的方法
  在上例中,抽象类 Student 中包含抽象方法 speak(),因此不能直接创建实例对象,但是在main() 方法中直接使用匿名对象创建了一个对象,创建过程中需要重写抽象方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值