interface DoStuff2 {
2. float getRange(int low, int high);
}
4. interface DoMore {
5. float getAvg(int a, int b, int c);
}
7. abstract class DoAbstract implements DoStuff2, DoMore { }//抽象类实现接口,却不实现DoStuff2, DoMore中的抽象方法,也不声明。
9. class DoStuff implements DoStuff2 {
10. public float getRange(int x, int y) { return 3.14f; }
}
12. interface DoAll extends DoMore {//接口实现接口,不实现DoMore抽象方法也不声明
float getAvg(int a, int b, int c, int d);
}
The file will compile without error.编译无错。
这个例子说明抽象类实现接口,接口实现接口都可以不实现抽象方法。
作者: 赵兵锋 时间: 2012-6-10 18:44
本帖最后由 赵兵锋 于 2012-6-10 18:45 编辑
- interface Myinterface{//接口Myinterface
- public void f1();//方法声明f1和f2,留给实现该接口的非抽象类实现
- public void f2();
- }
- abstract class MyAbstructClass implements Myinterface {//实现了Myinterface,但是未实现该接口中的方法,因为其是抽象类,允许存在未实现方法。
- public abstract void f3();//抽象方法,留给子类实现
- public void f4(){//抽象类中已实现的方法
- this.f1();//虽然此时还未实现f1方法,但f4被调用时,一定是实现了此抽象类的普通类调用的,其也一定实现了f1()和f2().
- this.f2();
- }
- }
- public class Main extends MyAbstructClass{//继承了抽象类,必须实现抽象中所有未实现的方法
- public static void main(String[] args) {
- Main m = new Main();
- m.f1();
- m.f2();
- m.f3();
- m.f4();//这4个方法均能顺利调用。
- }
- @Override
- public void f1() {}//实现未实现类,此抽象方法来自接口
- @Override
- public void f2() {}
- @Override
- public void f3() {}//实现抽象方法,此方法来自父抽象类
- }
复制代码
作者: 郑冬 时间: 2012-6-10 18:58
抽象类可以不实现接口的方法,但该类必须声明为抽象类,让他的子类来实现. 如果他的子类还是抽象类那就再由子类的子类去实现,直到继承该类的类不是抽象类为止.前提是所继承该类的派生类是不是抽象类来衡量是否需要实现接口的方法
作者: sbeeqnui1987 时间: 2012-6-10 22:24
接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,
其次实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
最后接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承。
作者: 胡卿 时间: 2012-6-10 22:59
- abstract class Person
- {
- abstract void study();
- abstract void sleep();
- }
- interface Function
- {
- abstract void smoke();
- }
- abstract class Student extends Person implements Function
- {
- void study()
- {
- System.out.println("good study");//抽象类(Student)继承了抽象类(Person),但并没有完全实现Person中的抽象方法(sleep()).
- }//抽象类(Student)实现(implements)接口(Function)时并没有实现接口中的方法(smoke())
- }
- class GoodStudent extends Student
- {
- public void sleep()
- {
- System.out.println("sleep");
- }
- public void smoke()
- {
- System.out.println("no smoke");//抽象类Student继承了抽象类Person,但并没有完全实现Person中的抽象方法:sleep()
- }
- }
- class InterfaceDemo
- {
- public static void main(String[] args)
- {
- GoodStudent s= new GoodStudent();
- s.study();
- s.sleep();
- s.smoke();
- }
- }
- /*以上程序可以正常运行,所以抽象类继承抽象类可以不实现父类中的抽象方法,抽象类也可以不实现接口中的方法。
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |