类的第五个成员:内部类(一)

版权声明:此文为本人所写,严禁版权侵占行为。如需转载请注明出处。 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();
		}
	}

8.匿名内部类

猜你喜欢

转载自blog.csdn.net/Abby_lxf/article/details/88979800