work061.java




package test04;


public class work061
{


public static void main(String[] args)
{
Subs1 a1 = new Subs1();
a1.doIt();
a1.doIt3();

Parents1 b2 = (Parents1)a1;
//b2.doIt(); //private方法,无法调用
b2.doIt2();
b2.doIt3();
}


}


class Parents1
{
private final void doIt()
{
System.out.println("Parents.doIt");
}

final void doIt2()
{
System.out.println("Parents.doIt2");
}

public void doIt3()
{
System.out.println("Parents.doIt3");
}
}


class Subs1 extends Parents1
{
public final void doIt()
{
System.out.println("Subs.doIt"); //似乎声明为private final的方法,可以使用public final重写
}

//void doIt2() //final方法不可重写


public void doIt3()
{
System.out.println("Subs.doIt3");
}

}


work062.java


package test04;


public final class work062
{
int a = 3;
void doIt()
{

}

public static void main(String[] args)
{
work062 s1 = new work062();
s1.a++;
System.out.println(s1.a);


}


//声明为final的类,不可继承,但是其内部的成员变量可以定义非final的
}








work063.java




package test04;


interface OutInterface1
{
public void func();
}


public class work064
{


public static void main(String[] args)
{
OuterClass2 c2 = new OuterClass2();
OutInterface1 face1 = c2.doIt();
face1.func();


//内部类实现接口,外部类写个方法,返回内部类的实例对象,然后使用接口,可以直接调用内部类的方法

OuterClass3 c3 = new OuterClass3();
OutInterface1 face2 = c3.doIt();
face2.func();

}


}


class OuterClass2
{
private class InnerClass2 implements OutInterface1 //注意此处内部类定义为private
{
InnerClass2(String s)
{
System.out.println(s);
}

public void func()
{
System.out.println("访问内部类中的func方法");
}
}

public OutInterface1 doIt()
{
return new InnerClass2("访问内部类构造方法");
}
}


class OuterClass3 extends OuterClass2
{
public OutInterface1 doIt()
{
return super.doIt();
}
}




work065.java




package test04;


public class work065
{
private int x;

private class InnerClass3
{
private int x = 9;
public void doIt(int x)
{
x++; //参数变量
this.x++; //内部类成员变量
work065.this.x++; //外部类成员变量
}
}
public static void main(String[] args)
{



}


}