Java常用类

内部类

编译后生成独立的字节码文件

内部类可以之间访问外部类的私有成员

疑问

访问修饰符

  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。

  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

  • public : 对所有类可见。使用对象:类、接口、变量、方法

  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的。接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public

多态

父类引用变量可以指向子类对象

注意:在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法

1、成员内部类

成员内部类,定义在外部类中的成员位置,与类中的成员变量相似,可以通过外部类对象进行访问

定义格式:
class 外部类{
  修饰符 class 内部类{
      //XXX
  }
}
访问方式:
外部类名.内部类名 变量名 = new 外部类名().new 内部类名();

内部类可以使用 private 或 protected 来修饰,如果你不希望内部类被外部类访问可以使用 private 修饰符

2、静态内部类

静态内部类可以使用 static 关键字定义,静态内部类我们不需要创建外部类来访问,可以直接访问它:

OuterClass.InnerClass myInner = new OuterClass.InnerClass();

静态内部类无法访问外部类的成员

3、局部内部类

局部内部类,定义在外部类方法中的局部位置,与访问方法中的局部变量相似,可以通过调用方法进行访问

定义格式:
class 外部类 {
  修饰符 返回值类型 方法名(参数){
      class 内部类 {
          //XXX
      }
  }
}
访问方法
在外部类方法中,创建内部类对象进行访问
代码实例:

//定义类
class Party {   //外部类,聚会
  public void puffBall(){   // 吹气球方法
      class Ball {   // 内部类,气球
          public void puff(){
              System.out.println("气球膨胀了");
          }
      }
      //创建内部类对象,调用puff方法
      new Ball().puff();
  }
}
//访问内部类
public static void main(String[] args) {
  //创建外部类对象
  Party p = new Party();
  //调用外部类中的puffBall方法
  p.puffBall();
}

4、匿名内部类

临时定义某一指定类型的子类

格式:
new 父类或接口() {
  //方法重写
};
//已经存在的父类:
public abstract class Person{
  public abstract void eat();
}
//定义并创建该父类的子类对象,并用多态的方式赋值给父类引用变量
Person p = new Person(){
  public void eat() {
      System.out.println(“我吃了”);
  }
};
//调用eat方法
p.eat();

 

posted @ 2021-10-18 21:32  clown-lan  阅读(61)  评论(0)    收藏  举报