例4.22
JOutTest.java
class JOut
{
static class JInner1
{
final static String InnerClassName = "JInner1";
double calculate(double i)
{
return i * i;
}
}
class JInner2
{
static final String InnerClassName = "JInner2";
double calculate(double i, double j)
{
return i * j;
}
}
}
public class JOutTest
{
public static void main(String args[])
{
JInner1 i1 = new JOut.JInner1();
JOut o = new JOut();
JInner2 i2 = o.new JInner2();
JInner2 i3 = new JOut().new JInner2();
System.out.println(JOut.JInner1.InnerClassName);
System.out.println(i1.calculate(10.0));
System.out.println(JOut.JInner2.InnerClassName);
System.out.println(i2.calculate(10.0, 20.0));
}
}
例4.23
JOuter.java
interface JInnerInterface
{
void SayHello();
}
public class JOuter
{
private int num = 10;
public class JInner3
{
private int num = 100;
public void show(int num)
{
num++; // 方法传递的参数
this.num++; // 内部类的成员变量
JOuter.this.num++; // 外部类JOuter的成员变量
System.out.println("现在的num值是: " + num);
System.out.println("现在的this.num值是: " + this.num);
System.out.println("现在的JOuter.this.num值是: " + JOuter.this.num);
}
}
JInner3 i = new JInner3(); // 成员变量i是JInner3内部类的实例对象
public void increaseSize(int n)
{
i.show(n); // 调用JInner3内部类的方法
}
public JInnerInterface makeJInner4()
{
class JInner4 implements JInnerInterface
{
public void SayHello()
{
System.out.println("Hello");
}
}
return new JInner4(); // 方法JInner4()返回JInnerInterface接口对象
}
public static void main(String[] a)
{
JOuter o = new JOuter();
o.increaseSize(1000);
JInnerInterface i = o.makeJInner4();
i.SayHello();
}
}
例4.24
JInnerClass.java
//定义一个抽象类JClass,JInnerClass类中生成的匿名内部类是其子类
abstract class JClass
{
int num;
public JClass(int i)
{
num = i;
}
public abstract void showNum();
}
public class JInnerClass
{
public static void main(String args[])
{
//匿名内部类定义与实例化过程,最后返回的是JClass类对象c
JClass c = new JClass(5)
{
public void showNum()
{
System.out.println("num = " + num);
}
};
c.showNum();
}
}
例4.25
JInnerTest.java
class SuperA
{
public String SayHello(String s)
{
return s + " Hello";
}
}
class SuperB
{
public int calculation(int i)
{
return ++i;
}
}
public class JInnerTest
{
private class JInnerTest1 extends SuperA
{
}
private class JInnerTest2 extends SuperB
{
public int calculation(int i)
{
return super.calculation(i);
}
}
public String SayHello(String s)
{
return new JInnerTest1().SayHello(s);
}
public int calculation(int i)
{
return new JInnerTest2().calculation(i);
}
public static void main(String args[])
{
JInnerTest test = new JInnerTest();
System.out.println(test.SayHello("张三"));
System.out.println(test.calculation(100));
}
}
例4.26
JCat6.java
interface JPet6
{
void name();
}
class JSmallAnimal
{
public void name()
{
System.out.println("class: JSmallAnimal---method: name");
}
}
public class JCat6 extends JSmallAnimal
{
private class JCatInner implements JPet6
{
public void name()
{
System.out.println("class: JCat6.JCatInner---method: name");
}
}
public static void main(String args[])
{
JCat6 cat = new JCat6();
cat.name();
cat.new JCatInner().name();
}
}
例4.27
JGeneric.java
class Hello
{
public String toString()
{
return "3";
}
}
public class JGeneric<T1, T2, T3>
{
public String test(T1 a, T2 b, T3 c)
{
return (a.toString() + b.toString() + c.toString());
}
public T1 getT1(T1 a)
{
return a;
}
public static void main(String args[])
{
JGeneric<Integer, String, Hello> j = new JGeneric<Integer, String, Hello>();
Integer a = new Integer(1);
String b = new String("2");
Hello c = new Hello();
System.out.println(j.test(a, b, c));
}
}
例4.28
JGeneric2.java
class Hello2
{
public String toString()
{
return "Hello";
}
public int GetNum()
{
return 0;
}
}
class SubHello2 extends Hello2
{
private int num;
SubHello2(int num)
{
this.num = num;
}
public int GetNum()
{
return num;
}
}
public class JGeneric2<T extends Hello2>
{
public String test(T t)
{
return (t.toString() + " , Number is " + t.GetNum());
}
public static void main(String args[])
{
JGeneric2<SubHello2> j = new JGeneric2<SubHello2>();
SubHello2 t = new SubHello2(100);
System.out.println(j.test(t));
}
}
例4.30
JClassTest.java
import java.lang.reflect.Constructor;
class Class1
{
}
class SubClass1 extends Class1
{
}
class JClassTest
{
public Object process()
{
Class1 c1 = new SubClass1();
return findClass(c1);
}
public Object findClass(Class1 class1)
{
return class1;
}
public static void main(String args[]) throws SecurityException, ClassNotFoundException
{
JClassTest c = new JClassTest();
Object c2 = c.process();
Class realClass = c2.getClass();
Class realClass2 = SubClass1.class;
System.out.println(realClass == realClass2);
/**
Constructor [] constructors = Class.forName("chap4.SubClass1").getConstructors();
for(Constructor x:constructors)
{
System.out.println(x.toString());
}
*/
}
}