内部类初步理解(一)

看了点视频和文章,对内部类有了点认识。按照自己的理解摘抄和备注一下。
**成员内部类:**成员内部类是外围类的一个成员,是 依附于外围类的,所以,只有先创建了外围类对象才能够创建内部类对象。也正是由于这个原因,成员内部类也不能含有 static 的变量和方法;

**静态内部类:**静态内部类,就是修饰为 static 的内部类,该内部类对象 不依赖于外部类对象,就是说我们可以直接创建内部类对象,但其只可以直接访问外部类的所有静态成员和静态方法;

**局部内部类:**局部内部类和成员内部类一样被编译,只是它的 作用域发生了改变,它只能在该方法和属性中被使用,出了该方法和属性就会失效;

**匿名内部类:**定义匿名内部类的前提是,内部类必须要继承一个类或者实现接口,格式为 new 父类或者接口(){定义子类的内容(如函数等)}。也就是说,匿名内部类最终提供给我们的是一个匿名子类的对象。
(其实就是说子类和实现类就没有类或者说没有起名字,直接弄出来子类的对象和实现类的对象)

上面这些可以分2种:
  (1) 在类中定义一个类(成员内部类,静态内部类);
  (2) 在方法中定义一个类(局部内部类,匿名内部类)。

内部类在实际生活中是存在的,比如:笔记本是一个类,那么笔记下的cpu也可以是一个类。这就是在类中还存在一个类。
java当中内部类的作用可以起到隐藏的作用。可以隐藏内部类。外部调用访问的时候,可以不知道有内部类的存在。

package com.lwh;
public interface Jumpping {
    
    
	void jump();
}

package com.lwh;

public class JumppingOperatro {
    
    

	public void method(Jumpping j){
    
    
		j.jump();
	}
}
package com.lwh;

public class Cat implements Jumpping {
    
    

	@Override
	public void jump() {
    
    

		System.out.println("猫跳高了");
	}

}
package com.lwh;

public class Dog implements Jumpping {
    
    

	@Override
	public void jump() {
    
    

		System.out.println("狗跳高了");
	}

}

package com.lwh;

public class JumppingDemo {
    
    

	public static void main(String[] args){
    
    
		
		JumppingOperatro jo = new JumppingOperatro();
		Jumpping j = new Cat();
		jo.method(j);
		
		Jumpping j2 = new Dog();
		jo.method(j2);		
		jo.method(new Jumpping(){
    
    

			@Override
			public void jump() {
    
    
				System.out.println("猫可以跳高了");
			}
			
		});		
		jo.method(new Jumpping(){
    
    

			@Override
			public void jump() {
    
    
				System.out.println("狗可以跳高了");
			}
			
		});
	}
}

在这里插入图片描述

这样就无需建立多个动物的类实现这个Jumpping()的接口类。直接用匿名的内部类很快解决。匿名内部类的整体是看做一个对象而已。是继承了父类或者实现了接口的一个类的对象。只不过这个类不出现,直接出来对象。

猜你喜欢

转载自blog.csdn.net/yemenlinweihan/article/details/104078707