Java内部类的定义、如何创建内部类、内部类的分类、内部类与外部类的关系⽂章⽬录
1. 内部类的基本概念
1.1 内部类的定义
内部类: 所谓内部类就是在⼀个类内部进⾏其他类结构的嵌套操作。
class Outer{
private String str ="外部类中的字符串";
//**************************
//定义⼀个内部类
class Inner{
private String inStr="内部类中的字符串";
//定义⼀个普通⽅法
public void print(){
//调⽤外部类的str属性
System.out.println(str);
}
}
//**************************
//在外部类中定义⼀个⽅法,该⽅法负责产⽣内部类对象并调⽤print()⽅法
public void fun(){
//内部类对象
Inner in =new Inner();
//内部类对象提供的print
in.print();
}
}
public class Test{
public static void main(String[] args)
{
//创建外部类对象
Outer out =new Outer();
//外部类⽅法
out.fun();
}
}
运⾏结果:外部类中的字符串
但是如果去掉内部类:
private String outStr ="Outer中的字符串";
public String getOutStr()
{
return outStr;
}
public void fun(){//2
//this表⽰当前对象
Inner in =new Inner(this);//3
in.print();//5
}
}
class Inner{
private String inStr="Inner中的字符串";
private Outer out;
//构造注⼊
public Inner(Outer out)//3
{
this.out=out;//4.为Inner中的out变量初始化
}
public void print(){//6
System.out.OutStr());//7
}
}
public class Test{
public static void main(String[] args)
{
Outer out =new Outer();//1.
out.fun();//2.
}
}
执⾏结果:Outer中的字符串
但是去掉内部类之后发现程序更加难以理解。
1.2 内部类的优缺点
内部类的优点:
1. 内部类与外部类可以⽅便的访问彼此的私有域(包括私有⽅法、私有属性)。
2. 内部类是另外⼀种封装,对外部的其他类隐藏。
3. 内部类可以实现java的单继承局限。
内部类的缺点:
结构复杂。
记录:使⽤内部类实现多继承:
private String name ="A类的私有域";
public String getName(){
return name;
}
}
class B {
private int age =20;
public int getAge(){
return age;
}
}
class Outter {
private class InnerClassA extends A {
public String name(){
Name();
}
}
private class InnerClassB extends B {
public int age(){
Age();
}
}
public String name(){
return new InnerClassA().name();
}
public int age(){
return new InnerClassB().age();
}
}
public class Test2 {
public static void main(String[] args){
Outter outter =new Outter();
System.out.println(outter.name());
System.out.println(outter.age());
}
}
2. 创建内部类
2.1 在外部类外部创建⾮静态内部类
语法: 外部类.内部类内部类对象 = new 外部类().new 内部类();
举例: Outer.Inner in = new Outer().new Inner();
2.2 在外部类外部创建静态内部类
语法: 外部类.内部类内部类对象 = new 外部类.内部类();
举例: Outer.Inner in = new Outer.Inner();
2.3 在外部类内部创建内部类语法
在外部类内部创建内部类,就像普通对象⼀样直接创建:Inner in = new Inner();
3. 内部类的分类
在Java中内部类主要分为成员内部类、静态内部类、⽅法内部类、匿名内部类3.1 成员内部类
类⽐成员⽅法
1. 成员内部类内部不允许存在任何static变量或⽅法 正如成员⽅法中不能有任何静态属性 (成员⽅法与对象相关、静态属性与类有关)
class Outer {
private String name ="test";
public static int age =20;
class Inner{
public static int num =10;
public void fun()
{
System.out.println(name);
System.out.println(age);
}
}
}
java类的概念public class Test{
public static void main(String [] args)
{}
}
2. 成员内部类是依附外部类的,只有创建了外部类才能创建内部类。
3.2 静态内部类
关键字static可以修饰成员变量、⽅法、代码块、其实还可以修饰内部类,使⽤static修饰的内部类我们称之为静态内部类,静态内部类和⾮静态内部类之间存在⼀个最⼤的区别,⾮静态内部类在编译完成之后会隐含的保存着⼀个引⽤,该引⽤是指向创建它的外围类,但是静态类没有。没有这个引⽤就意味着:
1.静态内部类的创建不需要依赖外部类可以直接创建。
2.静态内部类不可以使⽤任何外部类的⾮static类(包括属性和⽅法),但可以存在⾃⼰的成员变量。
class Outer {
public String name ="test";
private static int age =20;
static class Inner{
private String name;
public void fun()
{
System.out.println(name);
System.out.println(age);
}
}
}
public class Test{
public static void main(String [] args)
{
Outer.Inner in =new Outer.Inner();
}
}
3.3 ⽅法内部类
⽅法内部类顾名思义就是定义在⽅法⾥的类
1.⽅法内部类不允许使⽤访问权限修饰符(public、private、protected)均不允许。
class Outer{
private int num =5;
public void dispaly(final int temp)
{
//⽅法内部类即嵌套在⽅法⾥⾯
public class Inner{
}
}
}
public class Test{
public static void main(String[] args)
{}
}
2. ⽅法内部类对外部完全隐藏,除了创建这个类的⽅法可以访问它以外,其他地⽅均不能访问 (换句话说其他⽅法或者类都不知道有这个类的存在)⽅法内部类对外部完全隐藏,出了创建这个类的⽅法可以访问它,其他地⽅均不能访问。
3. ⽅法内部类如果想要使⽤⽅法形参,该形参必须使⽤final声明(JDK8形参变为隐式final声明)
class Outer{
private int num =5;
//普通⽅法
public void dispaly(int temp)
{
//⽅法内部类即嵌套在⽅法⾥⾯
class Inner{
public void fun()
{
System.out.println(num);
temp++;
System.out.println(temp);
}
}
//⽅法内部类在⽅法⾥⾯创建
new Inner().fun();
}
}
public class Test{
public static void main(String[] args)
{
Outer out =new Outer();
out.dispaly(2);
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论