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()); } }
相关文章推荐
- 黑马程序员_Java基础_面向对象(继承、子父类变量和函数以及构造函数特点、final关键字、抽象类、模版方法模式、接口)
- final关键字可以用来修饰类、方法、变量、参数,不能修饰抽象类和接口
- final关键字、多态、抽象类、接口的小复习
- java中的final关键字、抽象类及接口的定义
- JAVA基础再回首(七)——final关键字、抽象类abstract、接口interface、权限修饰符、导包
- 黑马程序员 Java基础 面向对象:继承、final关键字、抽象类、模版方法模式、接口、多态、Object类
- Java笔记2 面向对象<3>final关键字、抽象类、模板方法模式、接口
- JAVA面向对象5:final关键字、抽象类和接口
- Java基础——继承+子父类相关特点+Final关键字+抽象类+模板方法设计模式+接口
- 关于final关键字和抽象类,接口
- 马士兵J2SE-第三章-面向对象-Object类:toString方法、equals方法、对象转型、抽象类抽象方法、final关键字、接口
- final关键字可以用来修饰类、方法、变量、参数,不能修饰抽象类和接口
- Java基础学习笔记09——(final关键字,多态,抽象类,接口)
- JAVA基础day07 继承 final关键字 抽象类 接口 的学习
- Java学习第三篇:类的三大特征,抽象类,接口,final关键字
- final关键字、抽象类和接口
- String、StringBuffer、StringBuilder区别,HashMap与HashTable区别,final关键字详解及初始化成员变量位置,static关键字详解,抽象类与接口区别
- JAVA:类的三大特征,抽象类,接口,final关键字<3>
- 黑马程序员--03.Java面向对象--06.【final关键字】【抽象类】【接口】
- 黑马程序员——面向对象(final关键字、抽象类、模版方法、接口)