A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 薆情媬証書 于 2013-9-23 21:43 编辑

我新手,可能我问的一些问题,在你们看来都不是问题,但我刚学java不久,好多都不懂,希望有人帮我,别喷我!!
首先,什么是  内部类??
                          如何调用内部类?
其次,implements 和extends的区别是什么??

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 继续加油哈!

查看全部评分

9 个回复

倒序浏览
内部类。。顾名思义。在一个类中定义类。
定义在成员位置:
  1. class Outer{
  2. int x=3;//对变量的引用Out.this.x
  3. class Inner{
  4. int x=4;//this.x
  5. void method(){
  6. int x=5;
  7. System.out.print(x);
  8. }
  9. }
  10. }
复制代码
1,内部类可以直接访问外部类的成员。包括私有。原因是内部类持有外部类的引用。外部类名.this.
2,外部类要访问内部类。需要建立内部类对象。其他类访问其内部类方式。Outer.Inner in =new Outer().new Inner();如果内部类被私有。则无法访问。只能被内部类的外部类访问。
3,内部类在成员上被static修饰时。只能访问外部类的静态成员。
注意:内部类定义了静态成员。内部类也必须是静态的。
--------外部类的静态方法访问内部类。内部类也必须是静态的。

定义在局部时:
  1. class Outer{
  2. void method(final int y){
  3. final int x=4;
  4. class Inner{
  5. void show(){ x+y };
  6. }
  7. };
  8. }
复制代码
4,内部类被定义在局部时,不可被成员修饰符修饰,可以直接访问外部类成员,因为持有外部类引用。但是不能访问所在局部的变量,除非被final修饰。

匿名内部类就是内部类的简写格式,前提是必须继承一个类或者实现了一个接口。用父类或者接口的名字直接建立子类对象,定义子类内容。

extends是继承,一个类只能继承一个父类。
implements是实现,一个类可以实现多个接口。
不能多继承的原因就是方法和变量重名的情况会产生冲突。
多实现就没问题了。因为接口中都是抽象方法。

评分

参与人数 2技术分 +1 黑马币 +18 收起 理由
薆情媬証書 + 18 赞一个!
黄炳期 + 1 很详细,有心了。

查看全部评分

回复 使用道具 举报 1 0
定义在类中的类,就是内部类.
Class A{
  Class B{
}
}
B就是内部类了.理解了它的存放位置,再看楼上的内部类的一些相关定义,就可以了.

至于implements和extends   
extends是继承,  
implements是实现
比如
Class C extends D
{}
Class E implements F
{}
D和F的区别可能就是F要绝对是抽象类,里面都是抽象方法.
另外,一个类,可以实现多个抽象类.但只能继承一个类,为什么楼上也有说了

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 赞一个!

查看全部评分

回复 使用道具 举报
如果问题已经解决,麻烦把主题修改成“已解决”。
回复 使用道具 举报
extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,JAVA中不支持多重继承,但是可以用接口 来实现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,在java中implements表示子类继承父类,如类A继承类B写成 class A implements B{}

implements是一个类实现一个接口用的关键字,他是用来实现接口中定义的抽象方法。比如:people是一个接口,他里面有say这个方法。public interface people(){ public say();}但是接口没有方法体。只能通过一个具体的类去实现其中的方法体。比如chinese这个类,就实现了people这个接口。 public class chinese implements people{ public say() {System.out.println("你好!");}}


  implements,实现父类,子类不可以覆盖父类的方法或者变量。即使子类定义与父类相同的变量或者函数,也会被父类取代掉。

  这两种实现的具体使用,是要看项目的实际情况,需要实现,不可以修改implements,只定义接口需要具体实现,或者可以被修改扩展性好,用extends。

implements是一个类实现一个接口用的关键字,他是用来实现接口中定义的抽象方法。比如:people是一个接口,他里面有say这个方法。public interface people(){ public say();}但是接口没有方法体。只能通过一个具体的类去实现其中的方法体。比如chinese这个类,就实现了people这个接口。 public class chinese implements people{
public say() {System.out.println("你好!");
}
}

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 赞一个!

查看全部评分

回复 使用道具 举报
如果问题已经解决,请重新编辑帖子,修改帖子的主题分类为“已解决”{:soso_e181:}
回复 使用道具 举报
本帖最后由 doevents 于 2013-9-23 19:53 编辑

内部类:就是定义在类中的类就叫做内部类
Class Outer{
   class Inner{
      
    }
}
Inner就是内部类。
extends是继承,继承只能继承一次,不支持多继承,而implements是实现。他里面所有的方法都是抽象的,要实现他必须实现其里面的所有方法才可以,实现是可以实现多个抽象类,但继承只能继承一个。
回复 使用道具 举报
黄炳期 发表于 2013-9-23 18:56
如果问题已经解决,麻烦把主题修改成“已解决”。

我刚到这个论坛,有些规矩不太懂,如果有什么错误,请明确指出!!
还有,就是,发了问题贴,是不是得在规定的时间将未解决修改为已解决啊?这个规定时间是多少呢?
回复 使用道具 举报
薆情媬証書 发表于 2013-9-23 21:46
我刚到这个论坛,有些规矩不太懂,如果有什么错误,请明确指出!!
还有,就是,发了问题贴,是不是得在 ...

{:soso_e128:}不是什么错误了,就是提出的问题,你认为你已经得到想要的答案后,及时的改成“已解决”。

一来,想回答问题挣技术分的童鞋就不会再回答你的问题,因为已解决的问题一般不会再评分。
二来也是方便帖子的管理。

刚到这儿呢,就慢慢适应哈,一起努力!
回复 使用道具 举报
黄炳期 发表于 2013-9-23 21:56
不是什么错误了,就是提出的问题,你认为你已经得到想要的答案后,及时的改成“已解决”。
...

好的,知道了,谢谢!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马