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)
{
}
}