您的位置:首页 > 其它

final关键字、抽象类、接口

2017-08-11 12:16 260 查看

final关键字

final修饰类:表示该类不能被继承

final修饰方法:表示该方法不能被重写

final修饰变量:表示该变量值不能被修改了

重写与重载区别

重写是子类的方法覆盖父类的方法,要求方法名和参数都相同(注意:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏

重载是在同一个类中的搜索两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同

接口中的属性的默认是
public static final
、方法是
public abstract


抽象类

抽象方法,只含有声明部分,没有函数体,称为抽象方法。抽象方法默认是包内访问权限

abstract void f();


一个类含有一个或多个抽象方法,这个类就必须使用abstract关键字(注意:抽象方法必须是public或者protected的,不能是private),但一个使用abstract关键字的类,可以没有抽象方法。

接口中的所有方法默认都是
public abstract
的,不需要显示声明

注意抽象类不能直接被实例化。

接口

接口可以看做是高度抽象的类

接口中的属性的默认是
public static final
、方法是
public abstract


在JDK8.0中增加了接口中可以定义默认方法静态方法

默认方法可以被实现接口的类继承,静态方法需要直接使用接口名调用

interface TestInterFace{
// 接口中的静态方法jdk8出现
static void test() {
System.out.println("interface test");
}
// 接口中的默认方法,可以被实现接口的类的对象直接调用
default void test1() {
System.out.println("default test2");
}
void test2();
}
public class Main implements TestInterFace{
@Override
public void test2() {
System.out.println("123");
}
public static void main(String[] args) {
Main m = new Main();
m.test2();
m.test1();
TestInterFace.test();
}
}


接口的作用:

1).完全解耦;

当一个方法操作的是一个类时,我们就必须使用这个类或者是他的子类,有了接口,就可以使方法操作接口,这样就可以传入人一个实现了这个接口的类,放宽了限制。

策略模式:使用一个基类或者接口作为方法的操作对象,然后可以使用其他不同的实现子类或者接口作为参数传入,不同的的参数子类或接口会使方法产生不同的行为方法,这种模式被称为策略模式;策略就是变化部分也就是传入的子类和接口。

现实中会有好多类是已经存在的,当我们需要一个方法接受一个我们自己定义的接口类型时,已存在的类无法修改,不能满足接口,无法传入,这时就需要使用适配器设计模式

适配器设计模式:可以自己设计一个适配的类,实现我们自己定义的接口,然后这个类接受一个实现接口B的类,在实现A接口的方法中调用实现B接口类的对应方法,这种方式称为代理,利用这种方式实现了适配转换。

// 已存在类的通用接口
interface B{
void name();
void f();
}

// 自己定义的接口
interface A{
void name();
}
// 适配器类,传入实现接口B的类,转为实现接口A的类
class Adapter implements A{
B b;
public Adapter(B b){
this.b = b;
}
void name(){
b.name();
}
}


2)、多重继承

java接口可以实现多重继承

3)、工厂方法

实现简单的创建对象并调用方法,主要常见于设计框架

// 类实现的接口
interface A{
void method1();
}
// 工厂接口
interface AFactory{
A getA();
}
// 接口的具体实现类
class ImpA implements A{
public void method1(){}
}
// 具体实现的工厂类
class ImpAFactory implements AFactory{
public getA(){
return new ImpA();
}
}
public class Main{
// 这里调用接口的method1方法时,不需要创建具体类,只需要传入一个该接口的工厂方法
public static void service(AFactory fact){
A a = fact.getA();
a.method1();
}
public static void main(String[] args){
// 这里相当于使用框架的的用户,只需要知道执行的方法和需要传入的具体某个接口的工厂方法
service(new ImpAFactory());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐