java笔记3-面向对象

目录

 

数据封装

构造方法

方法重载

继承

多态

抽象类

接口

静态字段和方法

包 Package

作用域

classpath和jar


数据封装

方法封装了访问实例字段的逻辑
实例字段修饰符:

  • public:外部代码可以访问该字段
  • private:外部代码无法访问该字段

方法修饰符:

  • public:外部代码可以访问该方法
  • private:外部代码无法访问该方法

方法是一组执行语句,遇到return返回
void表示不返回任何值(注意区分null)
方法命名规范
方法内部的隐式变量this

构造方法

构造方法Constructor
构造方法可以在new操作时初始化实例对象
构造方法名就是类名
构造方法没有返回值
编译器会为没有定义构造方法的类自动生成默认构造方法
初始化顺序:

  • 1. 初始化字段
  • 2. 执行构造方法代码

可以定义多个构造方法,编译器根据参数自动判断使用哪个
可以在一个构造方法中通过this()调用另一个构造方法

方法重载

指方法名相同,但参数不同:

  • 类型不同
  • 数量不同

方法重载的目的是方便调用
重载方法应该完成相同的功能
不要去交换参数顺序
重载方法返回值类型应该相同

继承

继承 In
继承是面向对象编程的代码复用方式
Java使用extends继承
被继承类:超类,父类,基类 继承类:子类,派生类
Java只允许继承一个类
Object是所有类的根类
protected修饰的字段和方法可以被子类访问
super表示父类
没有调用super()时编译器会自动生成super()语句
如果父类没有默认构造方法就必须显示调用super()


向上转型与向下转型 Upcasting Downcasting
子类类型可以安全地向上转型为父类类型


父类类型可以强制向下转型为子类类型(可能报错ClassCastException)

Person p=new Person();

Student s=(Student)p;//ClassCastException


可以用instanceof判断类型

Person p=new Student();

if(p instanceof Student){

    Student s=(Student) p;

}

多态

多态 Polymorphic
方法覆写:子类覆写父类的方法,Override
多态:
针对某个类型的方法调用,其真正执行的方法取决于运行时实际类型的方法
对某个类型调用方法,执行的方法可能是某个子类的覆写方法
允许添加更多类型的子类来扩展功能
final
用final修饰的方法不能被Override
用final修饰的类不能被继承
用final修饰的字段初始化后不能重新赋值

抽象类

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

  • 被继承
  • 强迫子类实现抽象方法
  • 抽象方法相当于定义“规范”

面向抽象编程的本质:

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

接口

接口 interface
使用interface声明一个接口,接口只有抽象方法
实现interface使用implements
一个class可以实现多个interface
接口:

  • 不能定义实例字段
  • 不能定义普通方法
  • 可以定义default方法

一个接口可以extends另一个接口,相当于扩展接口方法
接口层次代表抽象程度
接口也是数据类型,适用于向上转型和向下转型

静态字段和方法

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

包 Package


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


包作用域
位于同一个包的类,可以访问包作用域的字段和方法:
不用public、protected、private修饰的字段和方法就是包作用域。


引用其他类的方法
使用完整类名 先import,再使用类名
static import可以导入一个类的静态字段和静态方法,很少使用


查找class
编译器查找class完整类名的步骤:

  • 1. 根据完整类名查找
  • 2. 查找当前package
  • 3. 查找import的class
  • 4. 查找java.lang的class
  • 5. 编译错误

作用域

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

public

定义为public的class,interface可以被其他类访问

private

定义为private的field,method无法被其他类访问

private访问权限限定在class的内部,与方法声明顺序无关

定义在一个class内部的class称为内部类(inner class)

protected

protected作用与继承关系

定义为protected的字段和方法可以被子类访问

package

包作用域是指一个类允许访问同一个package的:

  • 没有public,private修饰的class
  • 没有public,protected,private修饰的字段和方法
  • 包名必须完全一致


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

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/qwl755/article/details/85005642
今日推荐