构造函数和main函数能否存在于接口和抽象类中

一般情况下我在java类中会经常使用main函数和构造函数,但是否在抽象类(abstract class)或者接口(interface)中也使用过呢?当时我也不是很清楚于是做了测试:

abstract class Father{
public Father()
{
System.out.println("In abstract Father constructor...");
}
public static void main(String as[]) {
System.out.println("In abstract Father main...");
}
}

class Child extends Father{
public Child()
{
super();
System.out.println("In child constructor...");
}
public static void main(String as[]) {
System.out.println("In child main...");
}
}

分别执行Father和Child:
Father:
In abstract Father main...

Child:
In child main...

new Child:

In abstract Father constructor...
In child constructor...

接口中是根本不能声明main函数和构造函数。为什么main函数和构造在类和抽象类中可以而接口中不可以?
1.接口中不能有static的方法,接口中的所有方法必须是非静态的(no-static).因为接口强制所有方法必须由其实现类来实现。所以接口不能有main函数存在。
2.抽象类虽然类似接口,但是它是介于接口和类之间的特殊类。因为抽象类可以拥有自己的非静态方法。所以main函数可以在抽象类中声明。并且抽象类中强调的是继承,所以构造函数和继承的很多特性有很多密切关系。比如子类在实例化时调其构造函数首先会调用其父类的构造函数当其父类的构造函数执行完毕之后才能完成其构造函数。所以抽象类必须有其构造函数。
但是以上解释只是表面解释,在JVM执行该应用程序时,main函数首先会被执行。此时该类还没有被实例化。JVM是通过类名直接调用的,这也就是为什么mian函数必须被声明public static的缘故。main方法作为一个特殊的规范,与普通的方法有很大区别,限制很多,理解其原理需要学习JVM相关知识。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值