版权声明:此文为本人所写,严禁版权侵占行为。如需转载请注明出处。 https://blog.csdn.net/Abby_lxf/article/details/88979800
1.相当于说,我们可以在类的内部再定义类。外面的类:外部类。里面定义的类:内部类
2.内部类的分类:
1)成员内部类(放在类的内部,方法外面):外部类内部的内部类和外部类中的属性或者方法时并列使用的(相当于成员变量和成员方法)
2)局部内部类(放在类中方法的内部)
3.成员内部类:
1)他是外部类的一个成员
①可以有修饰符(4个)
②Static final abstract均可修饰
③可以调用外部类的属性和方法
2)具有类的特点
①abstract修饰
②还可以在类中定义属性,方法,构造器
4.局部内部类的使用
1)位置:在外部类的方面内部使用
2)常常使用一个方法,使其返回值为某个类或者接口的对象,而这个接口或者类在方法中定义
5.关于内部类需要掌握三点内容
1)如何创建成员内部类对象(先不谈及局部内部类)
①创建静态内部类的对象:可以直接通过外部类调用静态内部类的构造器
②创建非非静态内部类的对象:非静态需要使用对象进行调用,首先必须先创建外部类的对象,通过外部类的对象调用内部类的构造器
2)如何区分调用外部类。内部类的变量(尤其指的是变量重名的情况)
①内部类的变量:this.变量名
②外部类变量:外部类名.this.变量名
6.局部内部类的两种定义方式
/(一)****************更多的使用以下方式定义局部内部类*****************
public Comparable getComparable() {
//1.创建一个实现Comparable接口的类:局部内部类
class MyComparable implements Comparable{
@Override
public int compareTo(Object o) {
return 0;
}
}
//2.返回一个实现类的对象
return new MyComparable();
}
//(二)局部内部类(匿名的)****************使用以下匿名类方式定义局部内部类*****************
public Comparable getComparable1() {
//返回一个实现ComComparable接口的匿名内部类对象
return new Comparable() {
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
return 0;
}
};
7.创建内部类对象的方法
public class TestInnerClass {
public static void main(String[] args) {
//创建静态内部类的对象:可以直接通过外部类调用静态内部类的构造器
Person.Dog d = new Person.Dog(); //
//非静态内部类:非静态需要使用对象进行调用,首先必须先创建外部类的对象,通过外部类的对象调用内部类的构造器
Person p = new Person();
Person.Bird b = p.new Bird();
b.setName("杜鹃");
b.info();
}
}
class Person{
String name = "韩梅梅";
int age;
//成员内部类(非静态的)
class Bird{
String name = "黄鹂";
int age;
public String getName() {
return name;
}
public void setName(String name) {
System.out.println(name); //杜鹃
System.out.println(this.name); //黄鹂
System.out.println(Person.this.name); //韩梅梅
this.name = name;
}
public Bird() {
}
public void info() {
method1();
}
}