黑马程序员技术交流社区

标题: 关于抽象类的疑问?求解 [打印本页]

作者: 梁枝武    时间: 2012-10-29 01:15
标题: 关于抽象类的疑问?求解
本帖最后由 梁枝武 于 2012-10-30 17:16 编辑

抽象类中是否可以定义静态方法?抽象类可不可以去实现接口?那么如果只想使用具有多个方法的接口中的一个方法,可否只复写该方法并静态化,其余的不复写,从而直接用类名调用?请解释解释
作者: 林志进    时间: 2012-10-29 01:29
抽象类的普通方法可以定义静态方法,抽象方法不行,想想如果用类调用一个无方法体的方法会怎样。。
抽象类可以implements接口,但是可以选择是否实现接口方法,因为接口方法本来就是public abstract。
注意:重写的方法,静态只能重写静态,非静态只能重写非静态。 否者就叫重载了。接口的方法实现也是同样的规律

作者: 崔政    时间: 2012-10-29 20:14
楼主的这个想法很是犀利。。我从没往这上面想过。。
对于楼主的前两个问题,我感觉还是自己动手试试最好。我帮你得出了结论
  1. package day19;
  2. public class Test2 {
  3.         public static void main(String[] args) {
  4.                 Ab.aa();
  5.         }
  6. }
  7. interface A{
  8.         public void tb();
  9. }
  10. abstract class Ab implements A {
  11.         public static void aa(){
  12.                 System.out.println("可以定义静态方法");
  13.         }
  14.         public void tb(){
  15.                 System.out.println("复写接口的tb方法");
  16.         }
  17.        
  18. }

复制代码
依次回答楼主的几个问题。
抽象类中是否可以定义静态方法?
可以
抽象类可不可以去实现接口?
不可以
那么如果只想使用具有多个方法的接口中的一个方法,可否只复写该方法并静态化,其余的不复写,从而直接用类名调用?
通过代码可见,复写方法没问题,但是想要加静态不行。
为什么?
因为java 中不能定义抽象静态方法static
interface中所有的成员方法都是abstract的,当然也就不能定义静态方法static。

作者: 任雷彬    时间: 2012-10-30 11:23
首先,抽象类中可以定义静态方法,但是不可以用static修饰的abstract修饰的抽象方法。
因为抽象方法中只有方法定义,没有方法主体,用static修饰后,如果用类名调用函数是无法执行的。
在继承中,子类中的非静态方法只能继承非静态,静态只能继承静态。
2,类可以实现接口。但是接口是一个彻底的抽象类,用抽象类去实现接口理论上可以,但是没有太大意义。
3,如果子类只复写了接口中的一个方法,那么子类会继承接口中的其他抽象方法,子类也成为抽象类,
但是在实现时,静态只能继承静态,所以静态化复写接口中的方法本身是不可行的,更无法用类名调用
作者: 小灰灰    时间: 2012-10-30 11:43
我觉得,抽象类可以继承接口吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2