笔记(课4)

一阶段:第4天:面向对象+封装继承(7.27)

一.面向对象

1.1面向对象和面向过程

  1. 面向对象:面向对象是基于万物皆对象这个哲学观点。一种看待问题的思维方式,着眼于找到一个具有特殊功能的具体个体,然后委托这个个体去做某件事情,我们把这个个 体就叫做对象。
  2. 面向过程:一种看待问题的思维方式,在思考问题的时候,着眼于问题是怎样一步一步解决的,然后亲力亲为的去解决问题

1.2面向对象概述

  1. 类:一个具有特殊功能的实体的集合,类是Java语言的最基本单位
  2. 对象:在一个类中,一个具有特殊功能的实体,能够解决特定的问题,对象也被称为实例
  3. 类与对象的区别:类是对象的抽象(模板),对象是类的具体体现(实例)
  4. 注意:
    a.一个Java文件中可以写多个类,如果写多个类,则编译后会生成多个.class文件
    b.一个Java文件中 最多只能有一个被public修饰的类,这个类的类名必须和Java源文件名保持一致
    c.一个Java文件中如果只有 一个类,并且这个类不用public修饰的话,类名和文件名可以不一样,但习惯上,我们都会写上public
  5. 变量:
    a.成员变量:又称全局变量或属性,成员变量因为在堆内存当中,所以他有默认的初始值
    b.局部变量:没有默认的初始值
    c.成员变量和局部变量名字相同时,局部变量优先级高。就近原则。
    d.在静态方法中只能访问静态成员变量,在非静态方法中可以访问非静态成员变量和静态成员变量
  6. 方法:
    a. 静态能访问静态的,不能直接访问非静态的,如果要访问,必须要创建对象。
    b.非静态的能直接访问非静态的和静态的。
    c.如果要访问另外一个类中的静态成员变量和静态方法:类名.静态成员变量类名.静态方法名
  7. 对象的创建:对象的创建过程也被称为对象的实例化过程
          语法:类名 标识符 = new 类名();
  8. JVM内存分配:
    程序运行时,操作系统会分配三块主要的内存空间
    栈:直接存放基本类型数据,和引用类型的地址
      栈空间比较小,存取速度相对较快
      先进后出
    堆:存放引用类型的实际数据部分
      堆空间比较大,存取速度相对较慢
    方法区:(静态区、串池(常量池)、代码段),方法区中有一块空间叫串池,用来存放字符串常量, 在jdk1.8之后常量池作为堆中一部分,方法区的概念弱化。
  9. 构造方法:构造方法也叫构造器,是指当实例化一个对象(创建一个对象)的时候,第一个被调用的方法
    a.构造方法没有返回值类型,构造方法是在实例化对象的过程中自动调用
    b.如果不写构造方法,系统会默认为我们提供一个无参的构造方法,如果添加了构造方法,系统不再提供默 认的构造方法。
    c…构造方法在创建对象的过程中就会执行,而且每个对象只执行一次,对于普通方法而言,只有在需要使用的时候才被执行,并且一个对象可以调用多次
  10. 方法重载:同一个类中,方法名相同,参数列表不同
         参数列表不同:个数不同,类型不同,顺序不同
         和返回值修饰符无关
    生活描述类:(1)属性
          (2)行为
    程序中:(1)属性(变量)
        (2)方法

1.3this关键字

this:表示当前对象的引用。
this.方法:访问本类的成员方法
this():访问本类中的其他构造方法
  注意:
  a.必须出现在构造方法中
  b.访问的是除了当前构造方法之外的其他构造方法
  c.具体访问的是哪个构造方 法,取决于所传的参数
  d.只能书写在构造方法的第一条语句
  e.this()在同一个构造方法中只能出现一次

二.封装继承

2.1概述

  1. Java语言有三大特征:
      封装:对外部不可见,隐藏对象的属性和实现细节。
      继承:一个类继承另一个类的成员。
      多态:每个对象表现的多样性。
  2. Java语言在给被调用方法的参数赋值时,采用传值的方式: 基本类型数据传递的是该数据的值本身。 引用类型数据传递的也是这个变量的值本身,即对象的地址(引用),而非对象本身。
引用数据类型传递
结果:
  方法调用之前p.x ==5
  方法中obj.x==100
  方法调用之后p.x ==100
public class ceshi {
    public static void main(String[] args) {
        ceshi1 p = new ceshi1();
        p.x = 5;
        System.out.println("方法调用之前p.x ==" + p.x);
        p.change(p);
        System.out.println("方法调用之后p.x ==" + p.x);
    }
}

public class ceshi1 {
    int x ;
    public void change(ceshi1 obj){
        obj.x = 100;
        System.out.println("方法中obj.x==" + obj.x);
    }
}
基本数据类型传递
结果:
  方法调用之前x==5
  方法中x==100
  方法调用之后x==5
public class ceshi {
    public static void main(String[] args){
        ceshi1 pv = new ceshi1();
        int x = 5;
        System.out.println("方法调用之前x==" + x);
        pv.change(x);
        System.out.println("方法调用之后x==" + x);
    }
}

public class ceshi1 {
    public void change(int x){
        x = 100;
        System.out.println("方法中x==" + x);
    }
}

2.2封装

  1. 步骤:封装成员变量两个步骤:
      (1) 添加private 修饰符
      (2) 添加get和set方法
  2. static关键字:只能修饰类成员,修饰成员变量和方法
  3. 静态属性 :一般写在类头(构造方法上边)的位置
    所有本类对象所共有且相同的一个属性,是类的公用变量,不会随着对象的改变而改变的属性。例如:圆周率。
    静态属性先于对象,不依赖于对象,可以直接通过类名直接访问(类名.属性名)。
  4. 代码块
      代码块分为:局部代码块、动态代码块、静态代码块
      局部代码块:声明在方法中的代码块,执行时机与声明位置相关。 提前释放变量
      动态代码块:又称构造代码块或实例代码块,声明在类体中的代码块,创建对象时自动执行一次,每创建一 个对象就执行一次动态代码块。初始化工作。
      静态代码块:使用static关键字修饰的动态代码块,在类加载时自动执行,并只执行一次。

2.3继承

  1. 使用extends关键实现两个类的继承关系
  2. 子类继承父类,父类必须有无参的构造方法
  3. 不能被子类继承的成员:
      1)私有成员:私有成员不能被子类继承
      2)构造方法:父类中的构造方法不能被子类继承,但是会在子类的构造方法中调用(子类的构造方法中默认第一条语句是调用父类的默认构造方法)
  4. 继承的特点:
      1)单继承,一个子类只能有一个父类,一个父类可以有多个子类
      2)继承具有传递性
  5. super的概念: super表示父类对象
      1)super.属性:表示访问父类中的属性,当子类中定义了与父类同名的属性时,若想在子类中访问父类的同 名属性,需要使用super.属性访问
       2)super.方法:表示调用父类中的方法,在子类中需要调用父类中没有被重写的方法时,需要使用super.方法调用
       3)super():表示调用父类的构造方法,注意:super()必须是子类构造方法中第一条语句,子类中构造方法默认第一条语句会调用父类的无参数构造方法super(),也可以手动调用父类中带参数的构造方法
  6. 方法重写: 在继承过程中,子类中从父类继承来的方法无法满足自己的需求时,可以在子类中对父类方法进行完善,这个完善过程叫做方法重写(override),方法的重写相当于在子类中覆盖父类中的方法。
      针对的是非静态的方法
      (1) 方法名相同
      (2) 方法参数 返回值类型必须相同
      (3) 访问修饰符不能比父类严格

      java特殊 1.7 返回值可以和父类兼容就可以,必须是引用类型
      只要在子类中重写了父类的方法,通过子类对象调用的一定是子类重写的方法。
  7. this和super的区别:
    ​ (1) this表示当前对象的引用,super表示当前父类对象的引用
    ​ (2) this.属性可以调用当前对象的属性包括继承的属性,super.属性可以调用父类的属性
    ​ (3) this.方法() 可以调用当前对象的方法包括继承的方法,super.方法()可以调用父类的方法
    ​ (4) this(参数) 调用本类中其他的构造方法,super(参数) 调用父类的构造方法
    ​ (5) this(参数)和super(参数)只能用在构造方法中,必须是第一条语句,只能调用一次,不能同时使用。

2.4访问权限

1. 修饰类时:只能public 或 默认的
2. 修饰成员变量和方法:可以使用public 、默认、protected 、private
3. 局部变量不能访问权限修饰符。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值