版权声明:欢迎读者转载,如果有问题请给与评论。 https://blog.csdn.net/qq_41848006/article/details/83870674
package tgjavaday5;
import org.omg.CORBA.PUBLIC_MEMBER;
/**
*
* @author asus Tiger
* 对四大内部类的实现
*/
//成员内部类
interface inter1{
void interFun();
void interFun2(String str);
}
class Out1 {
private int id=0;
private String name=null;
private int age=0;
public Out1(int id,String name,int age){
this.id=id;
this.name=name;
this.age=age;
}
//成员内部类Inner1
//成员内部类可以调用外部类的所有数据……
class Inner1 {
int atest=10;
public void innerFun1(){
System.out.println("我是成员类中的函数");
}
public void innerFun2 (String str){
String string=str.toLowerCase();
System.out.println(string);
}
public void innerFun3(){
String string2=name.toString();
System.out.println("name.tostring()的值为:"+string2);
}
}
/*局部内部类Inner2:在方法中定义一个类,该类只属于该方法,不属于外部类!
* 局部内部类Inner2不能用访问修饰符,它只限定于该方法中使用
* 局部内部类只能访问该方法的final数据类型 */
public void innerFun3( final int []a){
class Inner2{
//数组排序
private int [] b=a;
void swap(int []b){
for(int i=0;i<b.length;++i){
for(int j=i+1;j<b.length;++j){
if(b[i]>b[j]){int temp=b[i];b[i]=b[j];b[j]=temp;}
}
}
}
void print(int []b){
for(int x :b){
System.out.print(x+" ");
}
}
/*验证局部内部类是否可以访问外部类的数据类型
* !int btest=atest;
* 局部内部类只能访问该方法的final数据类型,不能访问外部类的数据类型
*/
}
Inner2 aInner2=new Inner2();
aInner2.swap(a);
aInner2.print(a);
}
/*匿名内部类:匿名内部类也是局部内部类,无构造函数,
* 它的成员初始化只能靠构造代码块。
*/
public Inner1 innerFun4(int id,String name,int age){
return new Inner1(){
int id;
String name;
int age;
public void setout1(int id,String name,int age){
this.id=id;
this.name=name;
this.age=age;
}
public void getId(){
System.out.println(id);
}
};
}
}
public class Second {
public static void main(String []args){
Out1 out1=new Out1(01,"tim",10);
int []a={2,4,5,9,2,4,7,9,6,15,4,24,57,41,89,11};
//调用成员内部类的方法
Out1.Inner1 inner1=out1.new Inner1();
inner1.innerFun1();
inner1.innerFun2("wdweWDQWDQ..';.';DQWDWQDswd");
inner1.innerFun3();
//调用局部内部类的方法
out1.innerFun3(a);
//调用匿名内部类的方法
}
}