package com.superwy.inclass;
public class Outer {
//成员内部类
private int age = 99;
public static String a;
public class Inner{
private String name;
public static String schoolName;
private int age = 88;
public void test(){
System.out.println(age);
System.out.println(a);
int age = 66;
//就近原则,先取方法中的age
System.out.println(age);
//this取本类中的age
System.out.println(this.age);
//通过Outer.this.age来取外部类中的age
System.out.println(Outer.this.age);
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
}
package com.superwy.inclass;
public class Test {
public static void main(String[] args) {
//目标:了解成员内部和其特点
//先把外部对象new出来,再new内部对象
Outer.Inner in = new Outer().new Inner();
in.test();
}
}
package com.superwy.inclass;
public class Test01 {
public static void main(String[] args) {
//匿名内部类
Animal a = new Animal(){
@Override
public void cry() {
System.out.println("miaomiaomaio");
}
};
a.cry();
//result:miaomiaomaio
}
}
abstract class Animal{
public abstract void cry();
}
package com.superwy.inclass;
public class Test02 {
public static void main(String[] args) {
//目标:掌握匿名的常见使用场景
/* Swimming s1 = new Swimming(){
@Override
public void swim() {
System.out.println("dog swim");
}
};
go(s1);*/
//匿名内部类可以作为参数进行传递给方法,因为匿名内部类本质上是一个子类,并且会立刻创造出一个子类对象
go(new Swimming() {
@Override
public void swim() {
System.out.println("dog swim");
}
});
}
//设计一个方法,可以接收swimming接口的一切实现类对象进来参加游泳比赛
public static void go(Swimming s){
System.out.println("begin----------");
s.swim();
}
}
//猫和狗都要参加游泳比赛
interface Swimming{
void swim();
}