前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java之内部类的创建

java之内部类的创建

原创
作者头像
IT工作者
发布2022-05-09 15:21:37
4870
发布2022-05-09 15:21:37
举报
文章被收录于专栏:程序技术知识

一、内部类对象的创建有两种情况:

     1.静态内部类

     2.非静态内部类

      这两种情况主要区别是  在创建内部类对象的时候需不需要创建外部类的对象。

二、实例展示

     1.非静态内部类

        非静态内部类创建对象也有几种情况

        1)、常规情况

代码语言:javascript
复制
public class Outerclass {
    private String name;
    private int a;
    public void Stingto(String ident) {
        System.out.println(ident);
    }
    public  class innerclass{
        public void  to() {
            System.out.println(name);
        }
    }
    public void print(){
        System.out.println(a);
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String identname = "tuo";
        Outerclass q = new Outerclass();
        Outerclass.innerclass c = q.new innerclass();
        c.to();
        // c.print();   出错
    }
 
}

  首先创建外部内的对象,然后再用去创建内部类的对象

代码语言:javascript
复制
Outerclass q = new Outerclass();
Outerclass.innerclass c = q.new innerclass();

关于这句   Outerclass.innerclass c = q.new innerclass();   还有另外一种写法操作

代码语言:javascript
复制
innerclass c = q.new innerclass();

我试验了都没有报错,但是在《Think in Java》中作者要求写法是第一种:OuterClassName.InnerClassName.

 2)、内部类继承自某个类,这个时候可以在OuterClass中添加一个方法返回一个Innerclass类型的对象。

代码语言:javascript
复制
interface Select{
    
}
public class Outerclass {
    private String name;
    public void Stingto(String ident) {
        System.out.println(ident);
    }
    public  class innerclass implements Select{
        public void  to() {
            System.out.println(name);
        }
    }
    public innerclass innerclass() {
        return new innerclass();
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String identname = "tuo";
        Outerclass q = new Outerclass();
        Outerclass.innerclass c = q.innerclass();
        c.to();
    }
 
}

  这里仍然需要去创建一个外部类的对象,然后通过使用  innerclass innerclass()    创建外部类的对象。

总结:

       1.内部类是外部类的一部分,如果不是静态内部类的话(这表明内部类和外部类是有关联的)就必须通过创建对象来操作(这也是我们在创建内部类的对象的时候需要先创建外部类的对象)

       2.内部类也是外部类的一部分,所以他也可以使用外部类的所有元素数据,但是你不能在  public static void main(String[] args)    里通过创建对象使用外部类的元素数据,此时你只能使用内部类自己的数据方法(可见第一部分代码)。

2.静态内部类

      1)、常规情况

代码语言:javascript
复制
/*
 * interface Select{
 
    
}
*/
public class Outerclass {
    private String name = "tuo";
    public void Stingto(String ident) {
        System.out.println(ident);
    }
    public void print() {
        System.out.println(name);
    }
    public static  class innerclass {
        public void  to() {
    //        System.out.println(name);
        }
    }
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String identname = "tuo";
        innerclass q = new innerclass();
    }
 
}

   2)、内部类继承自某个类,这个时候可以在OuterClass中添加一个方法返回一个Innerclass类型的对象。 

代码语言:javascript
复制
interface Select{
    
}
public class Outerclass {
    private String name = "tuo";
    public void Stingto(String ident) {
        System.out.println(ident);
    }
    public void print() {
        System.out.println(name);
    }
    public static  class innerclass implements Select{
        public void  to() {
        //    System.out.println(name);
        }
    }
    public innerclass innerclass() {
        return new innerclass();
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String identname = "tuo";
        Outerclass outer = new Outerclass();
       // Outerclass.innerclass inner = outer.new innerclass();
        innerclass inner = outer.innerclass();
        innerclass c = new innerclass();
        c.to();
    
    }
 
}

1.静态内部类由于 static  的特性,使得它在两种情况下可以直接创建对象,同时也可以在第二种情况下通过方法 innerclass innerclass() 创建对象。

2.在内部类里面,它也失去了使用外部类数据方法的特点。

3.这里主要的原因是当声明一个事物是 static 时,就意味着这个域或者方法不会与包含它的那个类的任何对象实例关联在一起,所以,即使从未创建某个类的任何对象,也可以调用其 static 方法或者访问 其  static   域。

如果觉得对你有帮助,点个赞再走吧!!!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档