可以做动画的网站都有哪些站长工具seo综合查询全面解析
这里写目录标题
- 1、 内部类
- 1.1 成员内部类 静态内部类
- 1.2 局部内部类
- 1.3 匿名内部类[重点]
- 2、枚举
- 2.1 使用枚举类 设计单例模式
- 2.2 小实例
- 3、泛型
- 3.1 认识泛型
- 3.2 泛型类
- 3.3 泛型接口
- 3.4 泛型方法
- 3.5 注意事项
1、 内部类
内部类 就是定义在一个类中的类
1.1 成员内部类 静态内部类
注意
:成员内部类需要先new出外部类才可以实例化内部类,但是静态内部类不需要new外部类。
成员内部类 可以正常访问外部类的各种变量和方法,但是静态内部类只能访问外部类的静态变量和静态方法。
package com.cky.inner;public class iteminner {public static String name="cui";public int age=18;public int money=18;//public class inner {public int age = 20;public inner() {}public void test() {int age = 21;//可以正常访问 外部类的实例变量和静态变量System.out.println(age); //访问局部变量System.out.println(this.age); //访问inner对象的age对象System.out.println(iteminner.this.age); //访问外部对象的age对象System.out.println(name);}}//静态内部类public static class inner1{public void test1(){//System.out.println(money); 错误 静态内部类 不能访问外部类的实例变量System.out.println(name);//正确 可以访问静态变量}}
}
package com.cky.inner;public class Test {public static void main(String[] args) {//inner类属于外部类的一个类 所以需要先new出外部类对象才可以iteminner.inner inner = new iteminner().new inner();iteminner.inner1 inner1 = new iteminner.inner1();//由于是静态内部类 可以不用new 外部对象}
}
1.2 局部内部类
了解即可,局部内部类,就是定义在方法中的一个类。
1.3 匿名内部类[重点]
有些对象,我们并不必要为其专门建立一个类,只需要在用时为其传递即可。
匿名内部类 最主要的运用场景就是 我们可以将其作为参数 传递给函数。
new时
: //第一步为其创建一个子类,第二步是为其返回一个子类对象
package com.cky.inner;public class Test {public static void main(String[] args) {//第一步为其创建一个子类,第二步是为其返回一个子类对象Animal cat=new Animal(){@Overridepublic void cry() {System.out.println("猫在哭");}};
// test(cat);//等同于test(new Animal(){@Overridepublic void cry() {System.out.println("猫在哭");}}); //new 就会创建出一个animal的对象test(new Animal(){@Overridepublic void cry() {System.out.println("狗在哭");}});}public static void test(Animal animal){animal.cry();}
}interface Animal {public void cry();
}
结果:
猫在哭
狗在哭
2、枚举
枚举是一种特殊类,枚举的构造器是私有的,不能用于创建实例。
使用枚举类,我们可以限制类的实例对象个数。
写法
:
修饰符 enmu 枚举类名称{
名称1,名称2…
其他成员
}
例如:
public enum Day {MONDAY,TUESDAY,WEDNESDAY,// 其他枚举常量...
}
在加载Day类时,MONDAY、TUESDAY、WEDNESDAY等枚举常量就会被创建为Day类的实例。因此,你可以直接通过Day.MONDAY来访问这个实例,而不需要使用new关键字显式创建对象。
2.1 使用枚举类 设计单例模式
public enum Day {MONDAY;
}
这样就设计出来了单例模式,Day不能创建实例,只能有MONDAY一个对象。
2.2 小实例
package com.cky.list;import com.cky.static_demo.A;public class test {public static void main(String[] args) {showdifferent(Sex.GIRL);showdifferent(Sex.BOY);
// showdifferent(1); 错误 我们使用了枚举类型 只能传递给其枚举对象 ,通过这样 我们可以限制传入的对象}public static void showdifferent(Sex sex){switch (sex){case BOY:System.out.println("男");case GIRL:System.out.println("女");}}
}
enum Sex {//第一行就是枚举类可能的对象,其实就是A 是个枚举类 它可能的对象有X,Y,Z三种,//枚举类的 构造方法是私有的 不可能去实例化它BOY,GIRL;
}
3、泛型
3.1 认识泛型
例如:ArrayList 就是一个泛型类
package com.cky.fx;import java.util.ArrayList;public class Test {public static void main(String[] args) {ArrayList a=new ArrayList(); //此时没有定义泛型类型,就可以add任意类型a.add(1);a.add("java");ArrayList<String> a1=new ArrayList<>();
// a1.add(1); 错误 只能添加string类型a1.add("string");ArrayList<Cat> cats=new ArrayList<>();cats.add(new Cat());cats.add(new Cat());run(cats);ArrayList<Dog> dogs=new ArrayList<>();dogs.add(new Dog());dogs.add(new Dog());run(dogs);ArrayList<Animal> animals=new ArrayList<>();animals.add(new Animal());run(animals);}//自己定义泛型方法//比如动物 我们想让所有的动物都参加比赛 此时我们的要求是传入的必须是动物 而不能是其他 我们让T extens Anmial就可以了
// public static <T extends Animal>void run(ArrayList<T> t){
//
// }//这样写 是错误的 虽然 Dog和Cat是 Animal的子类 但是添加上 ArrayList就不同了 只能传入 Animal这一个
// public static void run(ArrayList<Animal> t){
// }//? 号是通配符 在我们使用泛型时可以使用
// extends 表示上限 即任何属于Animal的子类包括其本身均可 但是super表示下限 只有Animal和其父类才可以public static void run(ArrayList<? extends Animal> t){}}//自己定义泛型类class Myarr<T>{public void add(T t){return;}
}class Animal{void run() {}
}
class Cat extends Animal{}
class Dog extends Animal{}