1.一个接口,可含静态函数的定义和静态嵌套类的定义
public interface ClassInInterface
{
void howdy();
static class Test implements ClassInInterface //静态嵌套类
{
public void howdy()
{
System.out.println("Howdy!");
}
}
static int pp() //静态函数
{
return 5;
}
public static void main(String[] args)
{
new Test().howdy();
}
}
{
void howdy();
static class Test implements ClassInInterface //静态嵌套类
{
public void howdy()
{
System.out.println("Howdy!");
}
}
static int pp() //静态函数
{
return 5;
}
public static void main(String[] args)
{
new Test().howdy();
}
}
结果:Howdy!
2.若匿名内部类定义时生成的是接口实例,则匿名内部类内一定要实现全部接口声明的函数
public class Goods3
{
public A cont()
{
return new A() //匿名内部类
{
public void f(){}
public void p(){}
};
}
public static void main(String[] args)
{
Goods3 g=new Goods3();
A a=g.cont();
}
}
{
public A cont()
{
return new A() //匿名内部类
{
public void f(){}
public void p(){}
};
}
public static void main(String[] args)
{
Goods3 g=new Goods3();
A a=g.cont();
}
}
interface A
{
void f();
void p();
}
{
void f();
void p();
}
3.若父类与接口声明的方法完全相同,则考虑用子类中的内部类来实现接口,这样不会冲突
public class Try //外部类
{
public class B implements A //内部类
{
public void f() //内部类的f()
{
System.out.println("B and A");
}
}
public void f() //外部类的f()
{
System.out.println("Try");
}
public static void main(String[] args)
{
Try t=new Try();
Try.B b=t.new B();
t.f();
b.f();
}
}
{
public class B implements A //内部类
{
public void f() //内部类的f()
{
System.out.println("B and A");
}
}
public void f() //外部类的f()
{
System.out.println("Try");
}
public static void main(String[] args)
{
Try t=new Try();
Try.B b=t.new B();
t.f();
b.f();
}
}
interface A
{
int i=5;
void f();
}
{
int i=5;
void f();
}
结果:Try
B and A
B and A
4.内部类可以继承其外部类
public class OutExtendsIn
{
public static void main(String[] args)
{
Outer outer=new Outer();
outer.f();
Outer.Inner inner=outer.new Inner();
inner.f();
}
}
{
public static void main(String[] args)
{
Outer outer=new Outer();
outer.f();
Outer.Inner inner=outer.new Inner();
inner.f();
}
}
class Outer{ //外部类
int i=5;
void f(){
System.out.println("Outer");
}
class Inner extends Outer{ //内部类
void f(){
System.out.println("Inner"); //内部类重写方法f()
}
}
}
int i=5;
void f(){
System.out.println("Outer");
}
class Inner extends Outer{ //内部类
void f(){
System.out.println("Inner"); //内部类重写方法f()
}
}
}
结果:Outer
Inner
Inner
5.接口可继承接口(注:用的关键字是extends,不是implements),
抽象类可实现接口
public interface InterfaceA{
int i=5;
void f();
}
int i=5;
void f();
}
interface InterfaceB extends InterfaceA{
void g();
}
void g();
}
abstract class ClassC implements InterfaceB{
//f()没有实现是允许的,因为这是抽象类
public void g(){}
abstract void p();
}
//f()没有实现是允许的,因为这是抽象类
public void g(){}
abstract void p();
}
6.类成员的系统默认初始化比构造函数初始化早
public class Ha
{
public static void main(String[] args)
{
S s=new S();
}
}
{
public static void main(String[] args)
{
S s=new S();
}
}
class S
{
S()
{
System.out.println("S");
}
{
System.out.println("i");
int i=10;
}
}
{
S()
{
System.out.println("S");
}
{
System.out.println("i");
int i=10;
}
}
结果:i
s
s