现在的位置: 首页 > 综合 > 正文

java内部类的特点

2013年10月16日 ⁄ 综合 ⁄ 共 1541字 ⁄ 字号 评论关闭

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,先要获得外部类的对象,才可以获得外部类的对象。

抱歉!评论已关闭.