标题: 今天看到接口嵌套类有点晕,赶紧查资料共享下 [打印本页] 作者: 张涛的狂怒 时间: 2014-8-5 15:24 标题: 今天看到接口嵌套类有点晕,赶紧查资料共享下 类是对对象的抽象,而接口是对类的抽象。
一、接口中可以存在接口,只能嵌入嵌套类,而不能是非嵌套类
接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
接口中的方法默认都是 public,abstract 类型的
接口中可以定义抽象类可以定义,也不仅限于抽象类。只是接口本身不能被实例化,接口内部的类是可以实例化的。
调用接口的内部类有两种方法搜索:1.接口名.类名2.创建实现类implements接口,再直接实例化
内部类示例代码:
interface Test {
class A {
void print() {
System.out.println("hello--------A");
}
public int a = 1;//注意----接口的成员必然是public的。
}
}
class B implements Test {
void method() {
System.out.println(new A().a);
}
}
public class Demo1 {
public static void main(String[] args) {
Test.A b = new Test.A();
//类中的方法可以不用复写
b.print();//输出hello--------A
System.out.println(b.a);//输出1
new B().method();//输出1
}
}
注意-----可以不实现一个接口的内部接口!
注意:接口中定义的类都是静态嵌套类,并且按照约定,关键字static可以省略,并且其默认修饰符是public。
二、类中可以嵌入类与接口
普通类中嵌入抽象类与接口
class A{
void printA(){
System.out.println("hello-------A");
}
abstract class A1{
public abstract void printA1();
}
interface B{
public void printB();
}
}
class X extends A{
void printA(){
System.out.println("hello-------A");
}
class M extends A1{
public void printA1(){
System.out.println("hello-------A1");
}
}
class Y implements B{
public void printB(){
System.out.println("hello-------B");
}
}
}
public class Demo2 {
public static void main(String[] args){
A a=new X();
a.printA();
A.B b=new X().new Y();
b.printB();
A.A1 a1=new X().new M();
a1.printA1();
}
}
输出结果---“hello-------A hello-------A1 hello-------B”
三、内部类,内部接口可以定义成为private,protect,它们就相当于外围类的一个成员,内部类持有外部类的引用。
public class A {
public void f() {
class B extends Thread {
public void run() { }
}
class C implments Runnable {
public void run() { }
}
B b = new B();
C c = new C();
}
}
但是在方法中再定义内部类往往显得累赘。于是上面的代码就可以用匿名内部类重写成:
public class A {
public void f() {
Thread b = new Thread() {
public void run() { }
};
Runnable c = new Runnable() {
public void run() { }
}
}
}