Java常用类
内部类分类
内部类概念
概念:在一个类的内部再定义一个完整的类。
特点:
- 编译之后可生成独立的字节码
- 内部类可以直接访问外部类的私有成员,而不破坏封装。
- 可以为外部类提供必要内部功能组件
1 2 3 4 5 6 7 8 9 10
| public class Body { private String name; class Header{ public void show(){ System.out.println(name); } } }
|
成员内部类
- 在类的内部定义,与实例变量、实例方法同级别的类。
- 外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象。
- Outer outer = new Outer();
- Outer.Inner inner = outer.new Inner();
- 如果内部类和外部类有同一参数,默认为内部类参数。要调用外部类属性,带上
类名.this
- System.out.println(Outer.this.name);
- 成员内部类不能定义静态成员,但可以有静态常量
- 就是说不能有 static 成员,但可以有 static final
常量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
public class Outer { private String name = "张三"; private int age = 20;
class Inner{ private String address = "北京"; private String phone = "010"; private String name = "李四"; public void show(){ System.out.println(Outer.this.name); System.out.println(age); System.out.println(address); System.out.println(phone); } } }
public class TestOuter { public static void main(String[] args) {
Outer.Inner inner = new Outer().new Inner(); inner.show(); } }
|
静态内部类
- 不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员
定义类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| public class Outer { private String name = "xxx"; private int age = 18;
static class Inner{ private String address = "上海"; private String phone = "111"; private static int count = 1000; public void show(){ Outer outer = new Outer(); System.out.println(outer.age); System.out.println(outer.name); System.out.println(address); System.out.println(phone); System.out.println(Inner.count); } } }
|
实现
1 2 3 4 5 6 7 8
| public static void main(String[] args) { Outer.Inner inner = new Outer.Inner();
inner.show(); }
|
注意:并没有 new Outer对象,不是 new Outer().new
Inner(),只是包含关系
静态内部类直接new,成员内部类得一层一层new
局部内部类
定义类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| public class Outer { private String name = "刘德华"; private int age = 60;
public void show(){ String address = "深圳";
class Inner{ private String phone = "15558888"; private String email = "sdaa@as.com";
public void show2(){ System.out.println(name); System.out.println(Outer.this.age); System.out.println(phone); System.out.println(this.email); System.out.println(address); } } Inner inner = new Inner(); inner.show2(); } }
|
实现
1 2 3 4
| public static void main(String[] args) { Outer outer = new Outer(); outer.show(); }
|
外部类里的函数里面定义了类,最终调用时,应该在对应的函数内创建并实现
匿名内部类
- 没有类名的局部内部类(一切特征都与局部内部类相同)
- 作用:方便创建子类对象,最终目的为了简化代码编写。
- 必须继承一个父类或者实现一个接口
例如下面代码,由于Animal是抽象的,所以得用Tiger继承,再实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class Demo03 { public static void main(String[] args) { Animal a = new Tiger(); a.run(); } }
class Tiger extends Animal{ @Override public void run() { System.out.println("老虎跑的快"); } }
abstract class Animal{ public abstract void run(); }
|
匿名内部类的写法如下,直接再新建Animal后面Override实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class Demo03 { public static void main(String[] args) { Animal a = new Animal() { @Override public void run() { System.out.println("老虎跑的快"); } }; a.run(); } }
abstract class Animal{ public abstract void run(); }
|