Java SE 03 面向对象-上

来源:互联网 发布:百度云盘mac历史版本 编辑:程序博客网 时间:2024/06/05 15:03

3.1类和对象

3.1.1 定义类

类 某一批对象的抽象;对象 一个具体存在的实体
定义类的语法

[修饰符] class 类名{    零个到多个构造器定义...    零个到多个成员变量...    零个到多个方法...}

若未给一个类编写构造器,则系统会为该类提供一个默认的构造器,一旦编写了构造器,系统将不再提供构造器
定义方法的语法格式

[修饰符] 方法返回值类型 方法名 (形参列表){    //由零条到多条可执行性语句组成的方法体}

static 是一个特殊的关键字,可用于修饰方法、成员变量等成员。static修饰的成员表明它属于这个类本身,而不属于该类的单个实例,
构造器语法

[修饰符] 构造器名 (形参列表){    //由零条到多条可执行性语句组成的构造器执行体}构造器不能定义返回值类型。

3.1.2 对象的产生和使用

创建对象的根本途径是构造器,通过new关键字来调用某个类的构造器即可创建这个类的实例。

Person p = new Person();

Java的对象大概有如下作用,访问对象的实例变量,调用对象的方法。static修饰的方法和成员变量,即可通过类来调用,也可通过实例调用,没有static修饰的,只可通过实例调用。

3.1.3 对象、引用和指针

Person p = new Person();

这行代码创建一个Person实例,亦被称为Person对象,这个对象被赋给p变量。程序中定义的Person类型的变量实际上是一个引用,它被存放在栈内存里,指向实际的Person对象,而真正的Person对象则放在堆(heap)内存中。
堆内存里的对象可以有多个引用,即多个引用变量指向同一个对象,

Person p2 = p;

3.1.4 对象的this引用

  • 构造器中引用该构造器正在初始化的对象
  • 在方法中引用调用该方法的对象

3.2 方法详解

  • 方法的参数传递机制
    Java中方法的参数传递方式只有一种:值传递,
  • 方法重载
    允许用同一个类里定义多个同名方法,只要形参列表不同就行。称为方法重载。

3.3 成员变量和局部变量

3.3.1 成员变量和局部变量

成员变量指在类里定义的变量,局部变量指的是在方法里定义的变量。成员变量被分为类变量和实例变量。
类变量的作用域比实例变量的作用域更大,同一个类的所有实例访问类变量时,实际上访问的是该类本身的同一个变量,也就是说访问了同一片内存区。

3.4 隐藏与封装

3.4.1 理解封装

封装(encapsulation)是面向对象的三大特征之一,

3.4.2 使用访问控制符

  • private(当前类访问权限) 这个成员只能在当前类的内部被使用,适合用来修饰成员变量
  • default(包访问权限)可被相同包下的其他类访问。
  • protected(子类访问权限) 同一个包中的其他类,也可以被不同包中的子类访问
  • public(公共访问权限)

3.4.3 package import import static

3.5 深入构造器

3.6 类的继承

3.6.1 继承的特点

通过extends关键字实现
java的子类不能获得父类的构造器

3.6.2 重写父类的方法

子类扩展了父类,子类是一个特殊的父类。大部分时候,子类总是以父类为基础,额外增加新的成员变量和方法。但有一种情况,子类需要重写父类的方法,
子类包含与父类同名方法的现象被称为方法重写(override),要遵循“两同两小一大”规则
方法名相同,形参列表相同,子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法抛出的异常类应比父类方法声明抛出的异常类更小或相等。子类方法的访问权限应比父类方法的访问权限更大或相等。
子类覆盖父类方法后,子类对象将无法访问父类中被覆盖的方法,但可以在子类方法中调用父类中被覆盖的方法。使用super调用

3.6.3 super限定

3.6.4 调用父类构造器

在一个构造器中调用另一个重载的构造器使用this调用来完成,在子类构造器中调用父类构造器使用super调用完成。

class Base{    public double size;    public String name;    public Base(double size , String name){        this.size = size;        this.name = name;    }}public class Sub extends Base{    public String color;    public Sub(double size , String color){        super(size , name);        this.color = color;    }}

3.7 多态

Java引用变量有两个类型:一个是编译时类型,一个是运行时类型。 编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓的多态(polymorphism)

3.7.1 多态性

BaseClass   polymophic =new Subclass();

编译类型BaseClass,运行时类型SubClass,当运行时调用该引用变量时的方法时,其方法行为总是表现出子类方法的行为特征,
这就可能出现:相同类型的变量、调用同一个方法时呈现出多种不同的行为特征,这就是多态。

3.7.2 引用变量的强制类型转换

3.8 继承组合

3.9 初始化块

0 0
原创粉丝点击