当前位置: 代码迷 >> J2SE >> 请问 内部类 知识?感谢
  详细解决方案

请问 内部类 知识?感谢

热度:427   发布时间:2016-04-24 13:55:16.0
请教 内部类 知识???感谢
能讲解   一下   什么是内部类吗?   讲详细点好嘛..比如它有什么作用..有什么特性..什么时候用...如何用等....附加   例子最好..   看过   一些书     但是看不明白..不是很通俗易懂

------解决方案--------------------
在类的内部定义的类叫内部类,主要是它的作用范围.
------解决方案--------------------
内部类跟普通类没太大区别,主要是隐藏内部实现用的。
不过他有些语法很特殊,比如匿名内部类。
------解决方案--------------------
内部类有好多种,各自有不同的用处.

内部类优势在于可以访问其外围类的private成员变量和方法.
而外围类也可以访问内部类的成员变量和方法.

如果内部类只在方法中使用,就可以把内部类定义在方法中,其作用域就是这个方法块中,如果内部类用到方法的局部变量,则该局部变量就要声明为final

如果内部类只使用一次,就可以把内部类声明为匿名内部类.由于匿名内部类没有名字,也就没有构造方法.

另外如果定义的一个类名比较常见,如:Double.为了避免冲突,可以将其定义为一个static内部类.如:Point2D.Double

在学awt和Swing的时候回大量碰到内部类,到那时自然就明白了.

还有要说的是,虚拟机对待内部类和普通类是一样的.之所以内部类可以访问其外围类是因为编译器将外围类对象的引用隐式传递给了内部类,而且还隐式构造了对外围类private成员和方法的访问方法.
------解决方案--------------------
class a{
class b{ //内部类 :)
}
static class c{ //静态内部类,(嵌套类)
}
void f(){
class d(){
}
if(true){
class e(){
}
}

new d(){ //匿名类
void f(){
}
}
}
}


.......
开个玩笑。。。。
------解决方案--------------------
当我们准备上溯造型到一个基础类(特别是到一个接口)的时候,内部类就开始发挥其关键作用(从用于实现的对象生成一个接口句柄具有与上溯造型至一个基础类相同的效果)。这是由于内部类随后可完全进入不可见或不可用状态——对任何人都将如此。所以我们可以非常方便地隐藏实施细节。我们得到的全部回报就是一个基础类或者接口的句柄,而且甚至有可能不知道准确的类型。就象下面这样:

//: Parcel3.java
// Returning a handle to an inner class
package c07.parcel3;

abstract class Contents {
abstract public int value();
}

interface Destination {
String readLabel();
}

public class Parcel3 {
private class PContents extends Contents {
private int i = 11;
public int value() { return i; }
}
protected class PDestination
implements Destination {
private String label;
private PDestination(String whereTo) {
label = whereTo;
}
public String readLabel() { return label; }
}
public Destination dest(String s) {
return new PDestination(s);
}
public Contents cont() {
return new PContents();
}
}

class Test {
public static void main(String[] args) {
Parcel3 p = new Parcel3();
Contents c = p.cont();///////////////////////////////////////////////////////////
Destination d = p.dest( "Tanzania ");
// Illegal -- can 't access private class:
//! Parcel3.PContents c = p.new PContents();
}
} ///:~

------解决方案--------------------
推荐 think in java 讲的很详细。
------解决方案--------------------
留名
------解决方案--------------------
恩,正在学习JAVA编程思想(第4板)
------解决方案--------------------
向hzalan() 学习..
  相关解决方案