内部类的对象创建

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

     1.静态内部类

     2.非静态内部类

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

二、实例展示

     1.非静态内部类

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

        1)、常规情况

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();   出错
	}

}

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

Outerclass q = new Outerclass();
Outerclass.innerclass c = q.new innerclass();

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

innerclass c = q.new innerclass();

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

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

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)、常规情况

/*
 * 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类型的对象。 

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   域。

 

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

 

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值