文章目录
- 1. 内部类
- 2. 枚举
- 3. 泛型
1. 内部类
成员内部类
就是类中的一个普通成员,类似普通的成员方法、成员变量。(套娃)
public class Outer {
public class Inner {
private String name;
public static String school;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
public class Main {
public static void main(String[] args) {
Outer.Inner in = new Outer().new Inner();
in.setName("jehan");
Outer.Inner.school = "CQUPT";
System.out.println(Outer.Inner.school + " " + in.getName());
}
}
静态内部类
有static修饰的内部类,属于外部类自己持有。使用它时就像使用静态方法一样就行,只能访问外部类的静态成员,不能访问外部类的非静态成员。
匿名内部类(重点)
一种特殊的局部内部类;不需要为这个类声明名字。
- 特点:匿名内部类本质就是一个子类,并会立即创建出一个子类对象;
- 作用:用于更方便的创建一个子类对象;
- 通常作为一个参数传递给函数
2. 枚举
枚举是一种特殊类。
- 枚举类的第一行,只能写一些合法的标识符,多个名称用逗号隔开。
- 这些名称,本质是常量,每个常量都会记住枚举类的一个对象。
- 枚举类的构造器都是私有的,因此,枚举类对外不能创建对象。
- 枚举类都是最终类,不可以被继承。
public enum A {
// 注意:枚举类的第一行必须罗列的是枚举对象的名称
X, Y, Z;
private String name;
// 构造器都是私有的
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
A a1 = A.X;
System.out.println(a1);
}
}
3. 泛型
这一块和C++差不多,都是尖括号里面声明变量类型。
不过定义的时候比C++简单,只需要在类名后面加尖括号就行了。
需要注意的是,泛型不支持基本数据类型,只支持对象类型(引用数据类型)。我们知道,java的引用数据类型是在堆中创建的对象,引用数据类型的变量实际上是一个指向对象的指针,通过这个指针可以访问对象的属性和方法,具体的有4大类:类、接口、数组、字符串
所以int这些基本数据类型就不行,但java提供了Integer这样的引用数据类型
public class MyArrayList<类型变量E, 类型变量T> {
public boolean add(E e) {
return true;
}
}
泛型接口
修饰符 interface 接口名<类型变量, 类型变量, ...> {
}
修饰符 class 类名 implements 接口名<类型变量> {
@Override
...
}
泛型方法
泛型方法放泛型的位置有点不一样,是放到返回值前面。
修饰符 <类型变量> 返回值类型 方法名(形参) {
}
?
在泛型中作为通配符,在使用时表示一切类型来使用
public static go(ArrayList<? extends Car> cars) {}