内部类
1.为什么要用内部类?
答:如果一个类只需要被使用一次?专门定义一个类来描述就没必要,此时可以用内部类来实现.
2.什么是内部类?
定义:就是在一个类的内部定义的类叫内部类
3.内部类的分类?
内部类分类成为a.成员内部类 b.匿名内部类 c.局部内部类
成员内部类又分类a.静态内部类 b.非静态内部类
4. 非静态内部类的定义语法
public class 外部类类名{ 访问修鉓符 class 内部类名{
内部类内容
}
//外部类内容
}
a.定义非静态内部类
public class Test{ public class User{ String name; int age; public User(){} public User(String name,int age){this.name=name;this.age = age;} public void showDetail(){...} } //调用方法一: public void show(){ User user = new User("张三",20); user.showDetail(); } //调用方法二 public static void main(String[] args){ Test t = new Test(); Test.User user = t.new User(); user.showDetail(); } }
b.静态内部类
public class TestStaticClass { static class User{ String name; int age; public User(){} public User(String name,int age){this.name = name;this.age = age;} public void showDetail(){ System.out.println("name="+name+" age="+age); } } //调用方法一:在外部类的方法中创建内部类的对象来调用 public void test(String name,int age){ User user = new User(name,age); user.showDetail(); } /** * @param args */ public static void main(String[] args) { //用static修鉓的内部类相当于外部类 //方法二:直接new 外部类.内部类().内部类的方法() new TestStaticClass.User("dd", 20).showDetail(); // tsc.test("aa",20); } }
c.在方法中定义内部类
public class Test2 { private String str = "你好"; public void fun(final int num){ class User{ public void print(){ System.out.println("str="+str); System.out.println("num="+num); } }; new User().print(); } /** * @param args */ public static void main(String[] args) { Test2 t2 = new Test2(); t2.fun(5); } }
调用方法是在外部类的方法中new出内部类的对象调用内部类中定义的方法
d.匿名内部类
重写内部类的方法
a1.定义一个接口或抽象类
public static void method1(){ //匿名内部类创建接口的对象 Animal dog = new Animal() { @Override public void run() { System.out.println("四条腿跑"); } @Override public void eat() { System.out.println("狗吃狗粮"); } }; dog.run(); }
浙公网安备 33010602011771号