1,内部类可以访问其所在类的私有属性和方法。——自己人嘛,怎么都好说
2,内部类可以隐藏起来,不被同一个包中的其他类访问,如果一个类只对某个类提供使用,那么可以将其定义为内部类。——就当你是外部类的成员了,用法与属性和方法差不多。
3,匿名内部类可以方便的用在回调方法中。——只出现一次,把事办完就行,不需要留名
4,可以声明为抽象类,可以被其他的内部类继承,也可以声明为final。——既然叫类了,就得具有类的特点,可以抽象
5,和外部类不同,内部类可以声明为private和protected,而外部类只能是public和default。——这个问题嘛,就当他兼具类和方法的共同特征。
6,内部类可以声明为static,但此时就不能调用外部类的非static的成员。——这不是和方法一样吗?static方法中不能调用非static变量和方法。
7,非static的内部类中的成员不能声明为static的,只有在顶层类或static内部类中才可以声明static成员。——尽管你具备了类和方法的特征,但也要注意影响,头上不顶着static的光环,内部就消停些吧。
package com.stmcc.test.read;
import com.sun.org.apache.bcel.internal.classfile.InnerClasses;
public class InnerClassTest {
public static void main(String[] args) {
}
private static String sta_str = "staticString";
private String non_str = "nonStaticString";
private static InnerClassTest innerClass = new InnerClassTest();
private static class InnerClassA{
public static void main(String[] args) {
System.out.println("sta_str="+sta_str);//可以直接访问静态变量
System.out.println("non_str="+innerClass.non_str);//这样可以访问一个静态对象的非静态变量
}
}
abstract class Abs_Class{
protected abstract void abs_method();//可以声明为抽象类,可以添加抽象方法
}
class class_extends extends Abs_Class{
@Override
public void abs_method() {//这里必须实现抽象方法,但它的可见性必须大于等于他的父类
}
}
}
然而为什么要使用抽象类呢?
个人先体会一下:
1,既然是类,就可以包含方法和属性,内容相对丰富些。
2,既然是类,就具备类的一般特征,可以继承和多态。
3,既然在内部了,那么就可以自己来用,哪怕亲近到一个包里的其他类也不给用。谁还没点隐私呢?
如何调用内部类的方法?
首先要获得内部类的对象才可以,如果是静态方法,那么就要使用类直接调用,那也先要获得内部类才行。
//方法一:
Outer.Inner in = new Outer.new Inner();
//方法二:
Outer o = new Outer();
Outer.Inner in = o.Inner();
in.doSuffer();//doSuffer()是内部类的方法
以上是获得内部类对象的两种方法,本质上是一样的,这里获得内部类对象要有几个原则。
1,要通过外部类来调用内部类,可以说内部类是外部类的成员,不可以直接拿出来使用,一定要有外部类引领。
2,先要获得外部类的对象,才可以获得外部类的对象。