黑马程序员_java内部类

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

对于java内部类,曾经有一段时间,都不是很清楚,也不是很清楚它的作用。现在理解后,将其变为笔记,记录下来。

使用内部类的好处:每个内部类都能独立地实现接口,所以无论外围类是否已经继承了某个(接口)的实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。也就是说,内部类允许你继承多个非接口类型(类或抽象类)。

如下的内部类:

interface A{}

interface B{}

class X implements A, B{}

class Y implements A{

B makeB{

// Anonymous inner class

return new B(){};

}

}

 

public class MutiInterfaces{

static void takesA( A a ){}

static void takesB( B b ){}

public static void main( String[] args ){

X x = new X();

Y y = new Y();

takesA(x);

takesA(y); 

takesB(x);

takesB( y.makeB() );

}

}

通常遇到问题的时候,问题本身就能给出某些指引,告诉你应该使用单独一个类,或是使用内部类。

如果要继承的是抽象的类或具体的类,而不是接口,那么只能使用内部类才能实现多重继承。

使用内部类,可以获得其他一些特性:

1 内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立。

2 在单个外围类中,你可以让多个内部类以不同的方式实现同一个接口,或继承同一个类。

3 创建内部类对象的时刻并不依赖于外围类对象的创建。

匿名内部类:

匿名类的声明是在编译时进行的,实例化在运行时进行。这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。

在使用匿名内部类时,有以下几个原则:

匿名内部类不能有构造方法。  

匿名内部类不能定义任何静态成员、方法和类。  

匿名内部类不能是public,protected,private,static。  

只能创建匿名内部类的一个实例。

一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。  

因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。

内部类只能访问外部类的静态变量或静态方法。

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值