活动地址:CSDN21天学习挑战赛
特殊的抽象类
权限修饰符 interface 接口名称 [extends 父接口名列表]{
public static 数据类型 成员变量名 = 常量;
publict abstract 函数标签;
}
接口定义中的修饰符可以省略,默认为以上访问权限
接口和抽象类都不能用来实例化对象
class 类名 implements 接口名表{
}
如果实现某接口的类不是抽象类,则必须实现指定接口的所有抽象方法。
任何实现该接口的类实例化的对象,都可以存储在该接口类型的变量中,通过这些变量访问类所实现你的接口中的方法。
接口可以使用继承派生出新的类,extends
一个接口可以同时有多个直接父接口(多继承), 之间使用逗号分隔,子接口继承父接口的所有变量和方法。
如果子接口中定义了和父接口同名的常量,父接口中的常量被隐藏,如果是方法,则被覆盖.
interface B extends A{
}
一个类只能有一个直接父类,但是可以同时实现多个接口
public class Cylinder implements Face1,Face2{
}
定义在类中的类
可以把内部类看作外部类的一个成员,拥有自己的成员变量和方法.
把类的定义放在一个用于封装它的类的内部.
public class Group{
public class Student{
....
}
public void show(){
Student stu = new Student(...);
}
}
在外部类中通过一个内部类对象引用内部类中的成员.
在内部类中可以直接访问它的外部类的成员
内部类也可以通过创建对象从外部类之外被调用,但必须在内部声明为public
在内部类对象中保存了一个对外部类对象的引用,当在内部类的成员方法中访问某一个变量时,如果在该方法和内部类中都没有定义这个变量,调用就会被传递给内部类保存的哪个对外部类的引用,通过这个外部类对象的引用调用变量.
内部类编译完成后,产生的文件名为: 外部类名$内部类名.class
内部类定义为抽象类,需要有其他内部类来继承或者实现
内部类可以声明为protected, private
内部类不能与包含它的外部类名相同
内部类既可以使用外部类的成员变量,也可以使用内部类所在方法的局部变量
内部类不光可以在类中定义,也可以在程序块中定义
在方法中定义内部类,但是只能访问方法中final 类型的局部变量
内部类可以声明为static, 静态内部类自动转换为顶层类,即它没有父类,而且不能引用外部类成员或者其他内部类中的成员,非静态内部类不能声明静态成员,只有静态内部类才能声明静态成员.
可以利用内部类创建没有名字的内部类,进一步声明内部类和创建一个该类的对象
( //创建匿名内部类,并执行定义的方法
new 类名(){
方法名(参数列表){
// ...
}
}
).方法名(参数1, 参数2, ...)
public class Test{
public static void main(String[] args){
( // 匿名类,对Inner内部类的补充
new Inner(){
void setName(String n){
name=n;
System.out.print("姓名:"+name);
}
}
).setName("张 三");
}
static class Inner{
String name;
}
}
匿名内部类编译完成后,所产生的文件名: 外部类类名$编号.class, 编号为1,2,3… 代表第几个匿名内部类