A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁枝武 高级黑马   /  2012-10-29 01:15  /  1564 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 梁枝武 于 2012-10-30 17:16 编辑

抽象类中是否可以定义静态方法?抽象类可不可以去实现接口?那么如果只想使用具有多个方法的接口中的一个方法,可否只复写该方法并静态化,其余的不复写,从而直接用类名调用?请解释解释

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

4 个回复

倒序浏览
抽象类的普通方法可以定义静态方法,抽象方法不行,想想如果用类调用一个无方法体的方法会怎样。。
抽象类可以implements接口,但是可以选择是否实现接口方法,因为接口方法本来就是public abstract。
注意:重写的方法,静态只能重写静态,非静态只能重写非静态。 否者就叫重载了。接口的方法实现也是同样的规律

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
楼主的这个想法很是犀利。。我从没往这上面想过。。
对于楼主的前两个问题,我感觉还是自己动手试试最好。我帮你得出了结论
  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。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
首先,抽象类中可以定义静态方法,但是不可以用static修饰的abstract修饰的抽象方法。
因为抽象方法中只有方法定义,没有方法主体,用static修饰后,如果用类名调用函数是无法执行的。
在继承中,子类中的非静态方法只能继承非静态,静态只能继承静态。
2,类可以实现接口。但是接口是一个彻底的抽象类,用抽象类去实现接口理论上可以,但是没有太大意义。
3,如果子类只复写了接口中的一个方法,那么子类会继承接口中的其他抽象方法,子类也成为抽象类,
但是在实现时,静态只能继承静态,所以静态化复写接口中的方法本身是不可行的,更无法用类名调用
回复 使用道具 举报
我觉得,抽象类可以继承接口吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马