黑马程序员技术交流社区
标题:
关于抽象类的疑问?求解
[打印本页]
作者:
梁枝武
时间:
2012-10-29 01:15
标题:
关于抽象类的疑问?求解
本帖最后由 梁枝武 于 2012-10-30 17:16 编辑
抽象类中是否可以定义静态方法?抽象类可不可以去实现接口?那么如果只想使用具有多个方法的接口中的一个方法,可否只复写该方法并静态化,其余的不复写,从而直接用类名调用?请解释解释
作者:
林志进
时间:
2012-10-29 01:29
抽象类的普通方法可以定义静态方法,抽象方法不行,想想如果用类调用一个无方法体的方法会怎样。。
抽象类可以implements接口,但是可以选择是否实现接口方法,因为接口方法本来就是public abstract。
注意:重写的方法,静态只能重写静态,非静态只能重写非静态。 否者就叫重载了。接口的方法实现也是同样的规律
作者:
崔政
时间:
2012-10-29 20:14
楼主的这个想法很是犀利。。我从没往这上面想过。。
对于楼主的前两个问题,我感觉还是自己动手试试最好。我帮你得出了结论
package day19;
public class Test2 {
public static void main(String[] args) {
Ab.aa();
}
}
interface A{
public void tb();
}
abstract class Ab implements A {
public static void aa(){
System.out.println("可以定义静态方法");
}
public void tb(){
System.out.println("复写接口的tb方法");
}
}
复制代码
依次回答楼主的几个问题。
抽象类中是否可以定义静态方法?
可以
抽象类可不可以去实现接口?
不可以
那么如果只想使用具有多个方法的接口中的一个方法,可否只复写该方法并静态化,其余的不复写,从而直接用类名调用?
通过代码可见,复写方法没问题,但是想要加静态不行。
为什么?
因为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