Runnable类的源码:
public abstract void run();
这里用不用abstract有什么区别?
接口方法声明只能是public abstract
的,所以不管你在声明的时候加不加abstract
,都是可以的。Java 8开始,接口还引入了默认方法,也就是可以给接口的方法提供默认的实现,默认方法应当声明为:public default
并实现,public
可以省略。
举个例子:
public interface Test() {
// 以下四种声明方式都是合法的接口方法声明
void test1();
public void test2();
abstract void test3();
public abstract void test4();
// 默认方法可以省略public,但不能省略default,并且需要添加实现
default void hello() {
System.out.println("Hello");
}
public default hello(String name) {
System.out.println("Hello, "+name);
}
}
首先,run方法不实现的话继承这个类还有意义吗,如果定义成abstract的话就会强制你去实现它,如果不实现就会报错。
然后,你要理解一下什么是面向对象,这里的run方法,本来就是未完成的方法,如果你这里不写abstract的话,就会认为这个方法以及完善看不符合面向对象的思想
最后,抽象可以告诉你,,,其他地方我已经帮你写好了,你把这些我抽象的地方填好就可以运行了,你不用管其他地方了
其实没有必要的,接口里面的方法都是必须由实现类去实现的,所有接口中的方法都是public abstract,只是平时习惯上abstract是不写的,public关键字也可以不写,所以写上abstract没有意义
是接口,默认的修饰词就是public abstract ,你写不写都是这个
接口中的方法不都是abstract,让实现类去实现,不用去纠结的吧
默认情况下,接口内的方法都是public abstract,也就是说,如果你不写,他也是public abstract的。
规则,没什么的,只是大部分人都认为这么写好,也源于现在没有更好的方法代替。
接口内的方法都是public abstract你写不写都是这个
java中如果一个类中有被abstract修饰的抽象方法,那么该该类必须是抽象类或者接口。如果其他的类继承了该抽象类那么必须就要实现这个类中的
所有抽象方法。因此这种写法是为了让开发实现Runnable时强制必须实现其里面的run方法。任务在run中执行。
java中定义抽象方法是为了让一些公用的方法或者属性在父类中声明,然后子类可以公用公共属性,对于不同的方法,在子类中可以用不同的实现。这也就是java中的多态。
接口中有抽象方法,证明这个抽象方法时必须实现。
这就是接口的思想,你具体的实现代码不管你,但我规定了你的方法签名,我可以预先调用,但具体的实现可以按实际的变动。
你定义了非抽象方法,它默认也是抽象的方法,实现类必须重写,你只是省略的关键字abstract,实际上接口会自动给你加上的
abstract修饰的方法需要强制你去实现。这样有利于保持子类对父类特点的集成,让子类在向上造型的过程中保持其执行子都拥有一致的执行句柄。保证子类在语法约束下无论怎么变化,都能够干此族系能够干的事情。
你定义了非抽象方法,它默认也是抽象的方法,实现类必须重写,你只是省略的关键字abstract,实际上接口会自动给你加上的.
可以让子类重新扩展方法的功能,使得程序更具有扩展性
java中如果一个类中有被abstract修饰的抽象方法,那么该该类必须是抽象类或者接口。如果其他的类继承了该抽象类那么必须就要实现这个类中的
所有抽象方法。因此这种写法是为了让开发实现Runnable时强制必须实现其里面的run方法。任务在run中执行。
实现程序的多态性,使其各种定义有统一接口!
接口就是一种规范,实现类必须实现这种规范,进行开发。方法内部的业务可以不同,但是返回值和参数必须相同。
有的话,实现类必须重写,没有的话,这个接口就没有意义了。
主要用于多态,定义一个接口就比如你买了一个主机机箱,但是后面里面的配件随意你怎么搭配,符合规范就行!
对于这个你只需要搜索一下接口和抽象方法的区别即可
抽象方法是多态的特征之一,实现代码重用等等
abstract就是用来使函数定义和类定义与实现分离,要不在一个文件中显得冗余。其子类必须实现其父类所有方法,,否则依旧为抽象类。要注意与接口的区别
在接口中默认方法都是抽象的(abstract),不管是否使用public abstract,都一样,可以省略不写。
一般用于接口定义回掉。子类继承它。很好用
其实没有必要纠结这个,接口里面方法都是抽象的。之所以写public abstract void run();可能是给初学者看的,能够知道该方法需要被重写(好吧,这是自己瞎猜的,哈哈)