JAVA面向对象基础--N种内部类
一、成员内部类
//外部类 Outer(外部)
public class Outer {
//私有属性
private int id = 10;
//方法
public void out(){
System.out.println("输出外部类的方法!");
}
//定义内部类
public class Inter{
public void in(){
System.out.println("输出内部类的方法!");
}
//获取外部类的私有属性id
public void getID(){
System.out.println(id);
}
}
}
public class Application {
public static void main(String[] args) {
//实例化外部类
Outer outer = new Outer();
outer.out();//调用外部类的方法
//实例化内部类
//通过外部类来实例化内部类
Outer.Inter inter = outer.new Inter();
inter.in();//调用内部类的方法
inter.getID();//获取外部类的私有属性
}
}
运行效果图如下:
注意:如果内部类是静态类,则无法获取外部类的属性
- 原因:静态类会先实例化,比id属性加载要早
//定义内部类
public static class Inter{
public void in(){
System.out.println("输出内部类的方法!");
}
//获取外部类的私有属性id
public void getID(){
System.out.println(id);//报错!!!!
}
}
- 解决方法:把id也设置为静态
private static int id = 10;
二、局部内部类
public class Part {
public void method(){
//局部内部类
class Inter{
//方法
public void test(){
}
}
}
}
三、匿名内部类
public class Anonymity {
//匿名内部类
public static void main(String[] args) {
//没有名字的初始化类,不用将实例保存到变量中
new Inter().test();
}
}
//类
class Inter{
public void test(){
System.out.println("test");
}
}
注意:也可以实例化接口
public class Anonymity {
//匿名内部类
public static void main(String[] args) {
//没有名字的初始化类,不用将实例保存到变量中
//new Inter().test();
new Inter_2(){
@Override
public void test_2() {
}
};
}
}
//接口
interface Inter_2{
void test_2();
}