Java_基础_final & 抽象类 & 接口
final
1.final修饰类,类不能被继承
final class A{0}
//class B extends A{}
2、final修饰方法,方法不能被重写了
class C{
public final void test(){}
}
class D extends C{
@Override
public void test() {
}
3、final可以修饰变量总规则:有且仅能赋值一次
变量:
一,局部变量
二,成员变量
------1、静态成员变量
------2、实例成员变量
常量
抽象类
抽象类的注意事项
抽象类的好处
模板方法设计模式
建议使用final关键字修饰模板方法,为什么?
- 模板方法是给对象直接使用的,不能被子类重写。
- 一旦子类重写了模板方法,模板方法就失效了。
接口
接口中除了有成员变量和成员方法外是不能有其他成员的。
接口里面定义的成员变量java默认是常量
接口里面定义成员方法java默认为抽象方法
接口的好处
要给一个对象赋更多的功能,只需要在这个对象所在的类里创建更多的方法就行了,为什么还需要实现接口,通过接口来获得方法呢?
参照现实生活,有的人会开车,但是没有驾驶证,别人是不知道你会开车的,也不会把你当作司机来用,代码同样如此,反应到程序里面,以Driver接口为例,A类implements Driver表明A类是有Driver这个功能的,A类就必须把Driver这个方法实现出来。在主程序里面就可以把A当作一个Driver来使用了
JDK8后的接口新特性
1、默认方法:必须使用default修饰,默认会被public修饰
实例方法:对象的方法,必须使用实现类的对象来访问。
2、私有方法:必须使用private修饰。(JDK 9开始才支持的)
实例方法:对象的方法。
3、静态方法:必须使用static修饰,默认会被public修饰
接口为什么都默认使用public修饰?
接口是要供别人使用的,所以是需要向外暴露的,因此接口里面的成员需要使用public进行修饰
JDK8之后为什么要新增加这些新特性呢?
之前的接口中只能定义常量和抽象方法,接口功能并不强大,JDK8之后新增加了带方法体的方法,相当于把接口功能增强了。
以前如果要扩展接口业务就必须新增加抽象方法,倘若继承该接口的实现类很多,那么每一个实现类都需要实现该抽象方法,繁琐且工作量大,因此扩展的带方法体的新特性就可以很好的规避,直接在方法体里面实现,简单且高效,更便于项目的扩展和维护。
接口的多继承
接口的多继承:一个接口可以继承多个接口
interface A{}
interface B{}
interface C{}
//接口是多继承的
interface D extends C,B,A{
}
class E implements C,B,A{
}
/等价于/
class E implements D{
}
接口是用来被类实现的,有一个实现类E需要同时实现3个接口,因此就需要在implements后面写上这3个接口的名字。但是由于接口是多继承的,因此就相当于把C,B,A,这3个接口合并成为了一个D接口,而实现类E只需要实现D接口就相当于实现类全部接口,这样就更便于实现类去实现接口的功能。
注意事项
1、一个接口继承多个接口,如果多个接口中存在方法签名冲突,则此时不支持多继承。
// 1、一个接口继承多个接口,如果多个接口中存在方法签名冲突,则此时不支持多继承。
interface I{
void test1();
}
interface J{
String test1();
}
//interface K extends I, J{
//}
2、一个类实现多个接口,如果多个接口中存在方法签名冲突,则此时不支持多实现。
// 2、一个类实现多个接口,如果多个接口中存在方法签名冲突,则此时不支持多实现。
interface I{
void test1();
}
interface J{
String test1();
}
//class E implements I, J{
//
//}
3,一个类继承了父类,又同时实现了接口,父类中和接口中有同名的默认方法,实现类会优先用父类的。
// 3、一个类继承了父类,又同时实现了接口,父类中和接口中有同名的默认方法,实现类会优先用父类的。
class Fu{
public void run(){
System.out.println("===父类的run方法执行了===");
}
}
interface IT{
default void run(){
System.out.println("===接口IT中的run方法执行了===");
}
}
class Zi extends Fu implements IT {
}
4.一个类实现了多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可。
// 4、一个类实现了多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可。
interface It1{
default void test(){
System.out.println("IT1");
}
}
interface IT2{
default void test(){
System.out.println("IT2");
}
}
class N implements It1, IT2{
@Override
public void test() {
System.out.println("自己的");
}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!