1.内部类的价值
原因:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响(内部类仍然可以继承)。在我们程序设计中有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。可以这样说,接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。
1.1 代码
package createCode;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("hello word");
InnerValueTest.mian();
}
}
package createCode;
interface IShooter{
void shooting();
};
interface IArmer{
void arm();
};
public class InnerValueTest implements IShooter {
IArmer srmer = new Armer();
public void shooting(){
srmer.arm();
System.out.println("shooting");
}
class Armer implements IArmer{
public void arm(){
System.out.println("arm");
}
}
public static void mian(){
InnerValueTest ivt = new InnerValueTest();
ivt.shooting();
}
}
1.2 运行效果
2 外部调用内部类
2.1 代码
package createCode;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("hello word");
InnerClassTest.A a = new InnerClassTest().new A();
a.main();
}
}
package createCode;
public class InnerClassTest {
class A{
public void main(){
System.out.println("InnerClassTest.a.main");
}
}
}
2.2 运行效果
3. 内部类访问外部类的私有函数。
3.1 代码
package createCode;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("hello word");
iv.fun();
}
}
package createCode;
public class InnerClassVisit {
private void mian(){
System.out.println("InnerClassVisit.mian");
}
class Inner{
public void fun(){
mian();
}
}
}
3.2 运行效果
4 静态内部类
4.1 代码
package createCode;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("hello word");
InnerClassStatic.A as = new InnerClassStatic.A();
as.main();
}
}
package createCode;
public class InnerClassStatic {
static class A{
void main(){
System.out.println("InnerClassStatic.A.main");
}
}
}
4.2 运行效果
5 内部类返回外部类的指针
5.1 代码
package createCode;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("hello word");
InnerClassOutThis.Inner icot = new InnerClassOutThis().new Inner();
icot.get().fun();
}
}
package createCode;
public class InnerClassOutThis {
public void fun(){
System.out.println("out class of fun");
}
class Inner{
public InnerClassOutThis get(){
return InnerClassOutThis.this;
}
}
}
5.2 运行效果
6 匿名内部类
6.1 代码
package createCode;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("hello word");
InnerClassAnonymous icam = new InnerClassAnonymous();
icam.get().fun();
}
}
package createCode;
public class InnerClassAnonymous {
interface IA{
void fun();
}
public IA get(){
return new IA(){
public void fun(){
System.out.println("内部匿名类");
}
};
}
}
6.2 运行效果