java----内部类的定义及使用

内部类

定义:在一个类中进行其他类结构的嵌套操作。

1.内部类的优点:

a.内部类与外部类可以互相访问彼此的私有域,

b.内部类可以实现java的单继承局限

c.内部类可以对同一包中的其他类隐藏起来,只共外部类使用(保护性)

缺点:结构复杂

内部类的简单定义:

class Outer{ //外部类
    private String msg="hello world";
   class Inner{ //定义一个内部类
        public void print(){
            System.out.println(msg);
        }
    }
    public void fun(){//在外部类中定义一个方法,该方法负责产生内部类对象并调用print方法
        Inner in=new Inner();
        in.print();
    }
}
public class hehe{
    public static void main(String[]args){
        Outer out=new Outer();//外部类对象
        out.fun();//外部类方法
    }
}

 修改上述代码,将内部类拆开到外部,是想相同功能:

class Outer{
    private String msg="hello world";
    public String getMsg(){
        return this.msg;
    }
    public void fun(){  //调用了fun方法 3
        Inner in=new Inner(this);  //this表示当前对象  4
        in.print(); //调用方法  6
    }
}
class Inner{
    private Outer out;
    public Inner(Outer out){
        this.out=out;  //引用传递   5
    }
    public void print(){
        System.out.println(out.getMsg());  //执行此方法  7
    }
}
public class hehe{
     public static void main(String[] args) {
      Outer out=new Outer();//实例化外部类对象  1
      out.fun(); //调用构造方法  2
    }
}

2.内部类与外部类关系

a.对于非静态内部类而言,内部类的创建需要依赖外部类的实例化对象,在没有外部类对象之前是无法创建内部类的。

b.内部类是一个相对独立的个体,与外部类不是is-a关系

c.内部类可以直接访问外部类的元素(包含私有域),但是外部类不可以直接访问内部类元素,需要通过内部类的引用间接访问。

(1).内部类直接访问外部类元素

class Outter {
private String outName;
private int outAge;
class Inner {
private int InnerAge;
public Inner() {
Outter.this.outName = "I am Outter class";
Outter.this.outAge = 20;
}
public void display() {
System.out.println(outName);
System.out.println(outAge);
}
}
}
public class Test {
public static void main(String[] args) {
Outter.Inner inner = new Outter().new Inner();
inner.display();
}
}

(2).外部类需要通过内部类的引用间接访问

class Outer{
    public void display(){
        //外部类访问内部类元素,需要通过内部类引用来访问
        Inner in=new Inner();
        in.display();
    }
    class Inner{
        public void display(){
            System.out.println("haha");
        }
    }
}
public class hehe{
   public static void main(String[]args){
            Outer out=new Outer();//外部类对象
           out.display();//外部类方法
     }
    }

3.创建内部类的语法(在外部类之外)

a.创建非静态内部类

外部类.内部类 内部类 内部类引用=new 外部类().new 内部类();

outter.Inner in=new .outter().new Inner();

b.创建静态内部类

外部类.内部类 内部类引用=new 外部类.内部类();直接产生内部类,没有产生外部类对象

outter.inner in=new outter.inner();

 

 

 

    原文作者:wxm192939
    原文地址: https://blog.csdn.net/weixin_42365095/article/details/83212945
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞