内部类
内部类就是在一个类中在定义一个类,比如 A类中又定义一个B类,那么B类相对于A类就是它的类部类, A类相对于B类就是他的外部类.
- 成员内部类
- 静态内部类
- 局部内部类
package com.oop.Demo04;
//N种内部类
//成员内部类
public class Outer
{
private int a = 10;
public void eat (){
System.out.println("哈哈哈哈哈这是外部内的方法");
}
//创建一个内部类
//如果在class后面加上static 就是静态内部类
public class Inner{ //加上public才能在其他地方调用
//在内部类中创建一个方法
public void in (){
System.out.println("嘿嘿嘿这是内部类的方法");
//内部类可以访问static,但是static的内部类不能访问外部非static属性
//所以需要都加上static
}
public void getin(){
eat(); //内部类可以调用外部类的方法不管他私有不私有
System.out.println(a);
//class也可以写在方法中叫做局部内部类
class Inner {
//也可以写方法
public void b () {
}
}
}
}
//一个Java中只能有一个 public class,但是可以有需要class
class a {
public void main (String[] args){
}
}
}
package com.oop;
import com.oop.Demo04.Outer;
public class Application
{
public static void main (String[] args){
Outer outer = new Outer();
//通过这个外部类来实例化这个内部类
//outer.new Inner();快捷键alt加回车
Outer.Inner inner = outer.new Inner();
inner.getin();//获取内部类的方法
}
}
- 匿名内部类
package com.oop.Demo04;
public class Text
{
public static void main (String[] args){
//正常情况下
Apple apple = new Apple();
apple.eat();
// 但是我们可以通过匿名内部类
//没有名字初始化类,不用把实列保存在变量中
new Apple().eat();
//也可以直接new接口,注意接口方法必须重写
UserService usersevice = new UserService(){
//重写
public void hello(){
}
};//注意有个;号
}
}
class Apple {
public void eat (){
System.out.println("吃完了");
}
}
interface UserService{
void hello();
}