本讲主要内容:
1.内部类2.枚举
3.泛型
一、内部类
1.成员内部类(了解)
内部类可以直接访问外部类的属性:
注意:
在Java中,如果外部类和内部类中有同名且同类型的属性,那么在内部类中直接使用这些属性名会默认访问内部类自身的属性。如果需要从内部类访问外部类的同名属性,可以通过显式地使用 外部类.this.属性名 的方式来访问。
若通过外部类直接创建的内部类需要给外部类的同名属性赋值则需在内部类定义一个方法:
然后再主函数调用
输出结果:
2.静态内部类(了解)
3.局部内部类(了解)
4.匿名内部类(重点)
1.认识匿名内部类
常规写法:
package cn.hdc.oop3.i_innerAnonymous;
public class Main {
public static void main(String[] args) {
Animal a = new Cat();
a.cry();
}
}
class Cat extends Animal {
@Override
public void cry() {
System.out.println("喵喵喵");
}
}
abstract class Animal {
public abstract void cry();
}
匿名内部类写法:
package cn.hdc.oop3.i_innerAnonymous;
public class Test {
public static void main(String[] args) {
Animals a = new Animals() {
@Override
public void cry() {
System.out.println("我是匿名内部类");
}
};
a.cry();
}
}
abstract class Animals {
public abstract void cry();
}
2.匿名内部类常见应用场景
package cn.hdc.oop3.i_innerApply;
public class Main {
public static void main(String[] args) {
Swiming s2 = new Swiming() {
@Override
public void swim() {
System.out.println("猫游泳了...");
}
};
go(new Swiming() {
@Override
public void swim() {
System.out.println("狗游泳了...");
}
});
go(s2);
}
public static void go(Swiming s) {
System.out.println("开始....");
s.swim();
System.out.println("结束....");
}
}
interface Swiming {
void swim();
}
二、枚举类
1.认识枚举
2.枚举的应用场景
三、泛型
1.认识泛型
ArrayLlist<E>