Java入门之内部类的类型及使用

内部类的类型及使用

【内部类】 类–>里面–>定义类

OuterClass$InnerClass.class  命名----外部类名$内部类名
内部类(寄生类),外部类(宿主类)
内部类(static)  ---- 寄生于外部类本身。
内部类(非static) ---- 寄生于外部类实例中(new 外部类())。

内部类可以访问外部类所有的成员(private),但是反过来外部类是不能访问内部类成员(实现更高级的封装)。

原因:接口出现(多继承)。
1、可以实现一个类继承多个类,外部类继承一个,内部类继承一个。
2、可以实现一个类针对一个父类继承多次,在外部类给出一个重写的方法,内部类还可以再给出另外一套重写的方法。

1、实例内部类(非static) 不能定义static的成员。

2、类内部类(static) 可以定义static成员,也可以访问外围static成员。

3、局部内部类----在一个类中的方法,需要通过设计一个类来解决复杂问题,可以将这个类设置为方法内的内部类。

package com.sram.noname;
interface NameUtil{

void sayHello();  

}

class Student{
private String name; //学生姓名

public NameUtil setName(String _name){  //传入过长(5个字符)  stevej...   Tom
	class StudentName implements NameUtil{
		public StudentName(String n){
			if(n.length() > 5){
				name = n.substring(0, 5)+"...";
			}else{
				name = n;
			}
		}

		@Override
		public void sayHello() {
			System.out.println("Hello "+name);
		}
	}
	
	return new StudentName(_name);  //NameUtil n = new StudenName();
}

}

public class FunClassCode {
public static void main(String[] args) {
Student s = new Student();
NameUtil n = s.setName(“Tom”);
n.sayHello();
}
}

4、匿名内部类(多,Swing图形化界面(事件))

之前  AWT  做界面。  Frame
之后Swing 做界面。 JFrame
java.awt.*;
javax.swing.*;   javax 扩展。   在Java的swing类中,添加事件和监听会使用匿名内部类的方法添加。
btn.addActionListener(new ActionListener(){
		@Override
		public void actionPerformed(ActionEvent e) {
			System.out.println("OKOK");
		}
});	

猜你喜欢

转载自blog.csdn.net/qq_36755772/article/details/88954077