内部类的概念:
·所谓内部类(Inner Class),顾名思义,就是将一个类定义在另一个类的内部。 内部的类称之为内部类。
内部类的主要特点:
·内部类可以很好的实现隐藏,可以使用protected private修饰符。
·内部类可以直接访问外部类的所有成员,包括私有的成员。
·外部类不能直接访问内部类的成员,必须首先建立内部类的对象才能访问。
成员内部类及应用:
·成员内部类属于外部类的实例成员,成员内部类可以有public private default protected权限修饰符。在成员内部类中访问外部类的成员方法和属性,要使用 “外部类名.this.成员方法”和“外部类名.this.成员属性”的形式。
·创建成员内部类的实例使用“外部类名.内部类名 实例 = 外部类实例名.new 内部类 构造方法(参数)”的形式。
成员内部类有以下限制:
·成员内部类不能与外部类重名。
·不能在成员内部类中定义static属性,方法和类(static final形式的常量定义除外)因为一个成员内部类实例必然与一个外部类实例关联,static成员完全可以移到其外部类中去。
范例:
package 内部类;
import 内部类.outer.inner;
class outer
{
inner sc= new inner();
int score;
void visitInner()
{
inner sc = new inner();
sc.socre=103;
System.out.println("内部类打印"+sc.socre);
}
void myPrintf()
{
System.out.println("什么时候才能变强啊!");
System.out.println("外部类打印成绩"+outer.this.score);
}
class inner{
int socre;
void innerPrintf()
{
System.out.println("内部类打印 :好想变强啊!");
outer.this.myPrintf();
}
}
}
//外部类名.内部类名 实例 = 外部类实例名.new 内部类构造方法(参数)
public class Test {
public static void main(String[] args) {
outer o = new outer();
o.score=100;
outer.inner in = o.new inner();
in.socre=99;
in.innerPrintf();
o.visitInner();
}
}
内部类打印 :好想变强啊!
什么时候才能变强啊!
外部类打印成绩100
内部类打印103
匿名内部类及应用:
匿名内部类的特点:
·匿名内部类是没有名称的内部类,没办法引用它们。必须在创建时,作为new语句的一部分来声明并创建它们的实例
·匿名内部类必须继承一个类(抽象的,非抽象的都可以)或者实现一个接口,所有父类(或者父接口)是抽象类,则匿名内部类必须实现其所有抽象方法
语法:实例 new interface/superclass(){类体}
这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现 一个给定的接口,并同时创建该匿名类的一个新实例。
范例:
package 匿名内部类;
abstract class Demo1
{
abstract void myPrintf();
}
interface Demo2{
abstract void yourPrinf();
}
public class Test {
public static void main(String[] args) {
Demo1 D = new Demo1() {
@Override
void myPrintf(){
// TODO Auto-generated method stub
System.out.println("学习java的第十天!");
}
};
D.myPrintf();
new Demo2() {
@Override
public void yourPrinf() {
// TODO Auto-generated method stub
System.out.println("还是这么菜啊小菜狗!");
}
}.yourPrinf();
}
}
学习java的第十天!
还是这么菜啊小菜狗!