标签:抽象 rac 返回 开始 匿名 变量 com java 8 nbsp
如果一个事物包含另一个事物,这就是一个类内部包含另一个类。
如身体与心脏、汽车与发动机
内部类中包括成员内部类与局部内部类,其中局部内部类中又包含匿名内部类
格式:
修饰符 class 外部类名称{
修饰符 class 内部类名称{
// ...
}
// ...
}
内部类用外部类时,可以随意访问;外部类用内部类时,需要用内部类的对象。
1.间接方法:在外部类方法中使用内部类,main方法直接调用外部类方法。
public class Body {//外部类 public class Heart{//内部类 //内部类方法 public void beat(){ System.out.println("心脏跳动"); } } //外部类方法中使用内部类 public void methodBody(){ Heart heart = new Heart(); heart.beat(); } }
2.直接方法:
类名称 对象名 = new 类名称
外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称()
public class DemoMain {
public static void main(String[] args) {
Body body = new Body();
body.methodBody();
Body.Heart heart = new Body().new Heart();
heart.beat();
}
}
当存在重名变量时,访问如下:
public class Outer { private int num = 10; public class Inner{ private int num = 20; public void method(){ int num = 30; System.out.println(num);//30 System.out.println(this.num);//20 System.out.println(Outer.this.num);//10 } } }
*内部类的.class文件命名是 外部类名称$内部类名称.class,所以不建议命名类名称时使用$符号
如果一个类是定义在一个方法内部的,那么这就是一个局部内部类。
只有当前所属方法可以使用它,出了这个方法就不能使用。
格式:
修饰符 class 外部类名称{
修饰符 返回值类型 方法名称(参数列表){
class 内部类名称{
}
// 方法体
}
}
public class Outer { private int num = 10; public void method(){ /*final*/ int num = 20; class Inner{ public void getNum(){ System.out.println(num); } } } }
局部内部类如果希望访问所在方法的局部变量,那么这个局部变量必须是有效final的。
从Java 8 开始,只要局部变量事实不变,那么final关键字可以省略。
如果接口的实现类(或者父类的子类)只需要使用唯一一次,那么这种情况下就可以省略掉该实现类的定义,而使用匿名内部类。
格式:
接口名称 对象名 = new 接口欧名称{
//覆盖重写所有抽象方法
}
public interface MyInterface { public abstract void method(); }
public class DemoMain { public static void main(String[] args) { MyInterface obj1 = new MyInterface() { @Override public void method() { System.out.println("对象调用匿名内部类中的方法"); } }; obj1.method(); new MyInterface() { @Override public void method() { System.out.println("匿名对象调用匿名内部类中的方法"); } }.method(); } }
今天的内容需要理解,多练一练,明天还有一点内容,然后做一个综合实例。
标签:抽象 rac 返回 开始 匿名 变量 com java 8 nbsp
原文地址:https://www.cnblogs.com/Gazikel/p/13379892.html