从头认识java-8.11 为什么需要内部类?

这一章节我们来讨论一下为什么需要内部类?

答案:为实现多重继承提供便利。

在实现多重继承方面有两种方式:内部类以及接口。

1.接口

package com.ray.ch08;

public class Sequence implements A, B {

}

interface A {
}

interface B {
}


接口其实不用多说,你实现多少个都可以,然后只有根据接口就可以向上转型,调用相关的方法。

 

2.内部类

当我们需要继承实现的是类或者抽象类,根据语法规则,是不可以多重继承的,那么现在内部类就发挥作用了。

package com.ray.ch08;

public class Sequence implements A, B {
	class C implements A, B {
	}

}

interface A {
}

interface B {
}


 

package com.ray.ch08;

public class Sequence extends A {
	class C extends A {
	}

}

abstract class A {
}


 

从上面的代码看出,无论外部类实现什么接口或者继承什么类,对于内部类来说都是没有任何影响。

 

注意:只有在需要实现多重继承的时候才考虑内部类,不然一般不使用这种复杂的编程方式,因为影响代码的可读性。

 

当使用内部类之后,将获得以下特性:

(1)内部类可以有多个实例,而且实例跟外部类之间的通信是分开的。

package com.ray.ch08;

public class Sequence extends A {
	private int id = 0;

	class C extends A {
		public void setId(int id1) {
			System.out.println(id);
			id = id1;
		}
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public static void main(String[] args) {
		Sequence sequence1 = new Sequence();
		C c1 = sequence1.new C();
		c1.setId(2);
		System.out.println(sequence1.getId());
		Sequence sequence2 = new Sequence();
		C c2 = sequence2.new C();
		c2.setId(3);
		System.out.println(sequence2.getId());
	}

}

abstract class A {
}


输出:

0
2
0
3

从输出可以看见,虽然我们在第一次new C的时候改变了id,但是在第二此new C的时候是不受改变,因为它们分属不同实例,各自具有独立的状态。

 

(2)在单个外部类,里面的内部类可以使用不同的方式来实现同一个接口或者继承同一个类。

package com.ray.ch08;

public class Sequence {

	class B implements A {
		@Override
		public void run() {
			System.out.println("run1");
		}
	}

	class C implements A {
		@Override
		public void run() {
			System.out.println("run2");
		}
	}

	public static void main(String[] args) {
	}

}

interface A {
	void run();
}


 

总结:这一章节主要说明了为什么需要内部类,就是多重继承,当然一般我们是用不上的。

 

这一章节就到这里,谢谢。

-----------------------------------

目录

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值