您的位置:首页 > 编程语言 > Java开发

Java类的第五个成员:内部类

2015-08-16 21:40 375 查看
内部类

1.相当于说,我们可以在类的内部再定义类。外面的类:外部类;里面的类:内部类。

2.内部类的分类:成员内部类(声明在类的内部且方法之外) VS 局部内部类(声明在类的方法里)

3.成员内部类:

3.1.是外部类的一个成员:①可以有4种修饰符;②可以和类中的属性一样用static和final修饰。

3.2.具体类的特点:①可以和类一样用abstract修饰;②还可以在其内部定义属性、方法、构造器。

4.局部内部类

5.关于内部类需要掌握的三个点:

5.1.如何创建成员内部类的对象(静态成员内部类的对象 VS 非静态成员内部类的对象)

5.2.如何区分调用外部类、内部类的对象(尤其是变量重名时)

5.3.局部内部类的使用

成员内部类实例代码:

/**
* 成员内部类
*/
public class TestInnerClass {
public static void main(String[] args) {
//创建静态内部类的对象:可以直接通过外部类调用静态内部类的构造器
Man.Foot f = new Man.Foot();
//由于Foot类中的name属性为static修饰,所以可以直接调用
System.out.println(Man.Foot.name);
System.out.println(f.id);

//创建非静态内部类的对象:必须先创建外部类的对象,
//通过外部类的对象调用内部类的构造器
//方法一:
Man man = new Man();
Man.Head h1 = man.new Head();
//方法二:
Man.Head h2 = new Man("BIG" , 20).new Head("LITTLE" , 5);
h2.info("MID");
}
}

class Man {
String name;
int age;
//非静态成员内部类
class Head {
String name;
int id;

public Head() {
super();
}

public Head(String name, int id) {
super();
this.name = name;
this.id = id;
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public void info(String name) {
System.out.println("name="+ name );
System.out.println("this.name=" + this.name);
System.out.println("Man.this.name=" + Man.this.name);
}
}
//静态成员内部类
//Foot是类名,不是对象名,所以Man.Foot是一个未实例化的静态类
static/*这个static是表明这个类相对外部类Man是静态的,可以用Man.Foot*/class Foot {
static/*这个static是表明这个属性相对类Foot是静态的,可以用Foot.name*/ String name;
int id;

public Foot() {
super();
}

public Foot(int id) {
super();
this.id = id;
}
}

public Man() {
super();
}

public Man(String name, int age) {
super();
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}


局部内部类实例代码:

/**
* 局部内部类
*/
public class TestMethodInnerClass {
public static void main(String[] args) {

}
}

class OutClass {
//局部内部类
//如下的使用方式较少
public void method1() {
class InnerClass {

}
}

//常常使用一个方法,使其返回值为某个类或接口的对象,
//而这个类或接口在方法内创建
//方法一:
public Comparable getComparable() {
//1.创建一个实现Comparable接口的类:局部内部类
class MyComparable implements Comparable {
@Override
public int compareTo(java.lang.Object o) {
return 0;
}
}
//返回一个实现类对象
return new MyComparable();
}

//方法二:
//返回一个实现Comparable接口的匿名内部类的对象
public Comparable getComparable1() {
return new Comparable() {//实现Comparable接口的匿名类
@Override
public int compareTo(java.lang.Object o) {
return 0;
}
};
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: