classA{publicvoidf(){System.out.println("aaa");}}classBextendsA{publicvoidf(){super.f();//调用父类的方法System.out.println("bbb");}publicvoidf(int i){System.out.println("fff");}}publicclass test
{publicstaticvoidmain(String[] args){B bb =newB();
bb.f();A aa =newA();
aa = bb;
aa.f();}}
interfaceIt{publicstaticfinalint i =20;publicabstractvoidf();//public void f(){} ___error//只能有公有静态最后属性和公有抽象方法//接口中定义的属性只能是public static final(共有的静态的不允许被修改的)//接口中定义的方法只能是public abstract(共有的抽象的),但是这些修饰符可以被省略//一个接口可以继承多个接口,与class不同的地方}interfaceIt2{int i =20;voidf();}//class C extends It2//{ //}__________________error//*****类不能继承接口,只能实现接口abstractclassCimplementsIt2{}//这个类只实现接口的部分方法,则这个接口必须为抽象类//用抽象类来实现接口,这个抽象类将接口中成员实现下来不用extends用implementsclassBimplementsIt2{publicvoidf(){//i = 12;-------error原因是final修饰System.out.printf("%d\n",i);}//这样写的原因是,将继承的抽象方法重写成了非抽象的,调用final修饰的i}//用类来实现接口,其中用非抽象类来实现了抽象方法,原因是在子类中继承的抽象方法已经被实际化classDextendsBimplementsIt2{}//类对类的继承和对接口的实现一起发送时,则extends写在implements前面,不然会报错interfaceIt3{voidf();}classEimplementsIt3{publicvoidf(){System.out.printf("EEEEEE");}//重写:1、姓名,形参,返回值一样。2、权限必须高。publicvoidg(){}}classA{publicstaticvoidmain(String[] args){//It3 it = new It();----error//接口对象不能用new创建It3 it;//但可以定义一个接口引用类型的变量,并将其指向实现接口的对象,达到实现多态的目的//-----OK,这是直接用接口It定义一个对象it
it =newE();
it.f();//it.g();----error,通过接口引用只能调用从父接口实现的成员,不能调用子类特有成员}}