1.内部类概念:将一个类定义在另一个类的内部,该类就称为内部类
类中定义的内部类特点
1) 内部类作为外部类的成员,可以直接访问外部类的成员
(包括 private 成员),反之则不行。
2) 内部类做为外部类成员,可声明为 private、默认、protected
或 public。
3) 内部类成员只有在内部类的范围之内是有效的。
4) 用内部类定义在外部类中不可访问的属性。这样就在外部
类中实现了比外部类的 private 还要小的访问权限。
public class Face { //脸
private String shape="瓜子脸";//私有属性 public class Nose{//鼻子
private String shape="高鼻梁";
public void breath(){
//当内部类与外部类有相同的属性时,在访问外部类的属性时,需要加上外部类的 类名.this.属性
System.out.println("鼻子长在了"+Face.this.shape+"形状的脸上");
System.out.println(shape);
System.out.println("有使用鼻子呼吸!");
}
}
}
内部类的优缺点:
优点:内部类可以直接访问外部类的私有属性
缺点:破坏了类的结构
2.内部类分类
1) 成员内部类
内部类相当于外部类的成员
2) 静态内部类
public class Outer {
private static String name="张三";
/**静态内部类 ,(1)不允许访问外部类的非static属性
* (2)如果内部类中的方法为static方法,那么内部类也必须为静态的*/
static class Inner{
public void show(){
System.out.println(name);
}
}
static class Inner2{
public static void show(){ }
}
}
public class TestStaticInner {
public static void main(String[] args) {
//创建内部类的对象 new 外部类类名.内部类类名();
Outer.Inner i=new Outer.Inner();
i.show(); //访问的是静态内部类中的静态方法
Outer.Inner2.show();
}
}
3) 方法中的内部类
只能在方法中使用,相当于方法中的局部变量
public class Outer {
//Outer的成员方法
public void show(){
int a=10;//方法中的局部变量
//内部类相当于show方法中的局部变量,使用范围只能在show方法中
class Inner{
public void fun(){
System.out.println("a="+a);
}
}
//创建内部类的对象
new Inner().fun();
}
}
4) 匿名内部类 (存在继承或实现关系)
a) 可以实现一个接口,或者继承一个父类
b) 只能实现一个接口
c) 适合创建那种只需要一次使用的类,不能重复使用。
比较常见的是在图形界面编程 GUI 里用得到。
public abstract class Father {//父类
public abstract void dream();//伟 大的梦想
}
class Son extends Father{ //子类是有名称的,子类的名称叫son @Override
public void dream() { } }
class Test{
public static void main(String[] args) {
//父类引用指向子类对象
Father f=new Son(); //在名字的子类
/**没有名字的子类*/
Father f2=new Father()
{ //没有名称的类
@Override
public void dream() {
System.out.println("努力实现父亲的伟 大梦想,当兵光荣");
}
};
f2.dream();
}
}