2021-9-1JAVA基础知识点(内部类)

内部类

概述

在类A中定义一个类B,B就是一个内部类

//Outer类被称作外部类
public class Outer{
	//Inner被称作内部类
	public class Inner{
		
	}
}

分为成员内部类、局部内部类、匿名内部类

特点

  1. 内部类可以直接访问外部类的成员变量和成员方法,包括私有
  2. 外部类访问内部类成员必须创建对象
  3. 其他类访问内部类范例如下
//外部类
public class Outer {
//    成员变量
    private int age = 10;
    //    定义在成员位置,所以Inner被称为成员内部类
    public class Inner{
        int inAge = 20;
        //作为内部类可以直接访问外部类中的所有成员,包括私有
        public  void showOu(){
            System.out.println(age);
        }
        public  void showIn(){
            System.out.println(inAge);
        }
    }

    public void show(){
        //外部类想要访问内部类必须创建对象
        Inner in = new Inner();
        in.showOu();
    }
}

//测试类
public class MarioDemo {
    public static void main(String[] args) {
        Outer ou = new Outer();
        ou.show();

        //想访问Outer类中的成员内部类就必须创建对象
        Outer.Inner in = new Outer().new Inner();
        in.showIn();
    }
}
  1. 内部类一般是为了隐藏,不想让外界直接访问,一般使用private修饰符
public class Outer{
	private class Inner{
		
	}
}
  1. 使用方式为间接调用,在外部类中定义一个方法,创建内部类对象并调用内部类变量、方法。其他类创建外部类对象,通过该方法间接调用内部类
public class Outer{
	private class Inner{
		public void show(){
			sout;
		}
	}

	public void method(){
		Inner i = new Inner():
		i.show();
	}
}
  1. 局部内部类:定义在方法内的类
public class Outer{
	public void method(){
		//定义在方法内部的类称为局部内部类
		class Inner{
			public void show(){
				sout("局部内部类"):
			}
		}
		Inner i = new Inner();
		i.show
	}
}

public class demo{
	public static void main(String [] args){
		Outer ou = new Outer();
		ou.method();
		//程序会直接输出局部内部类
	}
}
  1. 匿名内部类:局部内部类的一种特殊形式,归属于局部内部类
    格式:
//存在一个具体类或接口,接口居多
new/接口名(){
	重写方法;
};
//注意结尾的分号

本质:是一个继承了具体类或实现了该接口的子类匿名对象
8. 调用方法:本质是一个对象,直接对象.方法();来进行调用

//调用方法一
new/接口名(){
	重写方法;
}.方法名();


//调用方法二
//Inter是一个接口,内部有一个show方法
Inter i = new Inter(){
	//重写接口内部抽象方法
	@Override
	public void show(){
		sout("匿名内部类");
	}
};
  1. 当你需要使用接口并重写方法时,使用匿名内部类就不需要每一次都新创建一个类来继承/实现该接口,直接使用匿名内部类即可
//定义一个接口,内部有一个show方法
public interface Inter{
	void show();
}

//定义一个操作类
public class InterOperater{
	//操作类里定义了一个方法,接受Iner类型变量调用方法
	public void show(Inter i){
		j.show();
	}
}

//定义一个测试类
public class Demo{
	psvm{
	InterOperater io = new InterOperater();
	/*
	io.show()
	想调用需要给Inter操作类传递一个Inter类型的变量进去,因为Inter使是一个接口,需要使用多态的方法实现,但是此处多次使用不同类需要不停创建新的类来实现Inter接口,不如直接使用匿名内部类的方法实现
	*/
		io.show(new Inter(){
			//重写Inter类里面的show方法
			@Override
			public void show(){
				sout("重写了show");
			}
		});
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值