成员内部类
对成员内部类的基本认识
对于一个成员内部类而言,它是在类中并且是方法外的类,也就是说成员所处的位置。一个成员内部类是如何在程序中去使用呢?第一是可以创建外部类的对象;第二是可以根据外部类对象创建内部类对象。而成员内部类可以直接使用外部类的成员。
#Person.java
public class Person{//成员外部类
boolean isActivity=true;
public void work(){
System.out.println("在工作");
}
class Heart{//成员内部类
public void activity(){
if(isActivity){
System.out.println("心脏还在跳动!");
work();
}else{
System.out.println("心脏停止!");
}
}
}
}
#Test.java
//测试类
public class Test{
public static void main(String[] args){
//创建外部类对象
Person p=new Person;
//根据外部类对象创建内部类对象
Person.Heart h=p.new Heart();
h.activity();
//p.isActivity=false;
//h.activity
}
}
静态内部类
静态内部类是什么?
它是由static关键字修饰的成员内部类是静态内部类。静态内部类只能使用外部类static修饰的成员变量或者成员方法。
而静态内部类的创建格式是:
外部类名.内部类名 变量名=new 外部类名.内部类名();
代码表示如下:
#Person.java
public class Person{
static boolean isActivity=true;
public static void work(){
System.out.println("在工作");
}
static class Heart{//成员内部类
public void activity(){
if(isActivity){
System.out.println("心脏还在跳动!");
work();
}else{
System.out.println("心脏停止!");
}
}
}
测试类:
#Test.java
public class Test{
public static void main(String[] args){
//外部类名.内部类名 变量名=new 外部类名.内部类名();
Person.Heart h=new Person.Heart();
h.activity();
}
}
局部内部类
上面讲了静态内部类,而局部内部类又是什么呢?
学过了局部变量,那局部内部类也就差不多理解了,局部内部类就是定义在方法中的类。局部内部类也是可以直接使用外部类的成员变量和成员方法。
局部内部类的代码如下:
#Dog.java
public class Dog{
String color="黑色";
public void swim(){
//局部内部类
class Legs{
int length=20;
public void use(){
System.out.println(color+"的狗用长度为:"+length+"cm的腿游泳");
}
}
//在局部内部类中使用
Leg l=new Leg();
l.use();
}
}
测试类:
Text.java
public class Test{
public static void main(String[] args){
Dog d=new Dog();
d.swim();
}
}
匿名内部类
匿名内部类通俗来讲就是没有名字的内部类,它可以简化接口的使用。
匿名内部类的格式:
new 接口或者类(){
重写方法;
}.方法名();
匿名内部类的实现代码如下:
接口类:
Study.java
public interface Study{//定义接口类
public abstract void studying();
}
实现接口类:
Student.java
//定义类实现接口
public class Student implements Study{
public void studying(){//重写抽象方法
System.out.println("学生要学习");
}
}
测试类:
Test.java
public class Test{
public static void main(String[] args){
//创建类对象
Student s=new Student();
s.studying();
//匿名内部类
new Study(){
public void studying(){
System.out.println("学生三心二意的学习");
}
}.studying();
}
}