/**
1. 接口A中, 常量默认为 static final,且一定要赋初值。所有的方法默认为:抽象的方法。
2. 接口的一种解释为:纯抽象类。 没有自定义构造函数。
3. 抽象方法只能用public 和 friendly 修饰。
4. 抽象类中,不一定包含抽象方法。但是如果有抽象方法的类一定是抽象类,加abstract修饰。
5. 抽象类中的常量,默认初始化为0,能够被赋值。
6. 抽象类B可以有自己的构造函数,但是不能自己构造实例。如:new B();
7. 抽象类中可以有静态块,和静态方法。
8. protected 控制子类基础范围 ,可以不是同一个包,friendly控制包范围访问权限。
**
**/
interface A
{
public int x = 3;
int i = 0; //static and final
public void print1(int i); //接口方法(抽象方法)不能带有主体
// static {
// System.out.println("this is A static block ");
// }
}
abstract class B{
int j;
public B(){ //是什么意思呢?
System.out.println("this is constructor B");
}
public abstract void print(); //抽象的方法不能有主体
public void p(){
System.out.println("this is B p");
}
public void print2(){}
static {
System.out.println("this is B static block ");
}
public static void prints(){
System.out.println("this is B static prints");
}
}
class C extends B implements A
{
int k = 0;
//@override B
public void print(){
System.out.println("this is C print and k="+k);
}
//@override B
public void p(){
System.out.println("this is C p");
}
// @override A
public void print1(int k){
System.out.println("this is C print1 k="+k);
}
public void print1(){
System.out.println("this is C print1 k="+k);
}
}
public class TestInterfaceAndAbstract{
public static void main(String args[]){
C c = new C();
c.print();
c.print1(2);
c.print1(C.i);
c.p();
// C.i = 100; // 不能为最终变量指定值
c.j = 10;
System.out.println(c.j);
//new B();
C.prints();
}
}