2-02 Java 面向对象-抽象类和接口

目录

一.抽象类

二.接口

三.包和classpath


一.抽象类


抽象类Abstract Class
    抽象方法:用abstract定义了方法签名,但没有语句
    含有抽象方法的类称为抽象类
抽象类的作用:

被继承
强迫子类实现抽象方法
抽象方法相当于定义“规范”
面向抽象编程的本质:

上层代码只定义规范
不需要子类即可编译
具体逻辑由不同子类实现,调用者不关心


二.接口

1.定义

使用interface声明一个接口,接口只有抽象方法 实现interface使用implements 一个class可以实现多个interface
不能定义实例字段 不能定义普通方法 可以定义default方法
一个接口可以extends另一个接口,相当于扩展接口方法接口层次代表抽象程度
接口也是数据类型,适用于向上转型和向下转型

2.默认方法

默认方法是JDK8新特性,指的是接口也可以提供具体方法了,而不像以前,只能提供抽象方法

3.为什么会有默认方法

假设没有默认方法这种机制,那么如果要为Mortal增加一个新的方法revive,那么所有实现了Mortal接口的类,都需要做改动。
但是引入了默认方法后,原来的类,不需要做任何改动,并且还能得到这个默认方法
通过这种手段,就能够很好的扩展新的类,并且做到不影响原来的类

三.包和classpath

1.静态字段和方法  和final修饰符

2.包

3.作用域(访问权限)

4.classpath 和 jar

1.静态字段和方法
    用static修饰的字段:静态字段,属于class不属于实例
    访问静态字段使用:类名.静态字段不推荐使用实例变量.静态字段用static修饰的方法:静态方法,属于class不属于实例
    访问静态方法使用:类名.静态方法不推荐使用实例变量.静态方法静态方法不能访问this变量,但可以访问静态字段
    静态方法常用于工具类和辅助方法

2.final

用final修饰的方法不能被Override
用final修饰的类不能被继承
用final修饰的字段初始化后不能重新赋值


3.包
package用于解决类名冲突:
    Java完整类名=包名+类名JVM只看完整类名编译器编译后的class只含完整类名包可以有多层结构包没有父子关系
包作用域

位于同一个包的类,可以访问包作用域的字段和方法:
不用public、protected、private修饰的字段和方法就是包作用域。
引用其他类的方法
    使用完整类名先import,再使用类名
    static import可以导入一个类的静态字段和静态方法,很少使用
查找class
编译器查找class完整类名的步骤:
1.根据完整类名查找
2.查找当前package
3.查找import的class
4.查找java.lang的class
5.编译错误

默认自动import当前package默认自动import java.lang.*

4.作用域
访问权限

   访问权限指一个类内部,能否引用另一个类以及它的字段和方法访问权限有public、protected、private和package四种
   final不是访问权限
最佳实践:最小化暴露对外方法
局部变量

方法内部定义的变量是局部变量(包括方法参数名)
局部变量作用域由所在语句块{...}决定
5.classpath和jar

classpath
    classpath是环境变量,指示JVM如何搜索class,路径和操作系统相关
classpath设置方法:

在系统环境中设置(不推荐)
启动JVM时用-classpath或-cp设置(推荐)
Eclipse自动传入当前工程bin目录作为classpath
jar

jar包是zip格式的压缩文件,包含若干class文件
jar包相当于目录
使用jar包来避免大量目录和class文件
创建jar包:
    JDK的jar命令
    Maven等工具  压缩为zip然后改名为jar
    jar包可以有一个特殊的/META-INF/MANIFEST.MF文件来指定Main-Class
 

猜你喜欢

转载自blog.csdn.net/lduzhenlin/article/details/88944537