七、类、对象和方法

类和对象的关系

  • 类定义了对象的本质;

  • 类(class)是对象(object)的模板,而对象(object)是类的一个实例(instance)。

  • 使多个对象的指向相同:

    Student stu1 = new Student();
    Student stu2 = stu1;

7.1 类

7.1.1 类的组成

  • 变量:指对象的状态

  • 方法:指对象的功能单元

  • 消息:软件对象通过相互间传递消息来互相作用和通信;

    • 一个消息由三部分组成:

      • 接收消息的对象;
      • 接收对象要采取的方法;
      • 方法需要的参数。
  • 注意:

    • 类体中只能定义变量、常量和方法。

    • 对于静态方法或变量,建议使用类名调用:Student.***;

7.1.2 类的三大特性

继承、封装、多态

7.1.3 类定义的语法规范

  • 类的严格定义

    [类的修饰符] class 类的名称 [extends 父类名称][implements 接口名称列表]
    {
    变量定义及初始化;
    方法定义及方法体;
    }
  • 类的修饰符:public, abstract, final.

  public, abstract/final;

7.1.4 this 关键字

this指向自己的引用,即当前方法所在的对象。

  • 主要作用:将自己这个对象当做参数,传给别的对象。
  • 如果形参名和类属性名相同时,需要用到 this

7.1.5 构造器(构造方法)

构造器(构造方法)

  • 创建类的对象(也可以初始化相关属性):new 构造方法

  • 显式定义类的构造器之后,系统不再提供默认的空参构造器。

this 调用构造器

① 在类的构造器中,显示的使用 this(形参列表) 的方式,调用指定的其他构造器。

② 构造器中不能通过 this(形参列表) 的方式调用自己。

③ 如果一个类中有 n 个构造器,则最多有 n-1 个构造器中使用了 this(形参列表)

④ 规定:this(形参列表) 必须在当前构造器的首行

⑤ 构造器内部,最多只能声明一个 "this(形参列表)" ,用来调用其他的构造器。

7.2 对象

7.2.1 匿名对象

没有显式赋给一个变量。

  • 特征:匿名对象只能调用一次。

  • 使用:new phone

    如:

    new Phone().playGame();

7.3 方法

7.3.1 方法定义的语法规范

  • 方法的定义:

    [方法修饰符] 返回类型 方法名称(参数1,参数2,...)[throws exceptionalList]
    {
    statement//方法体
    }
  • 方法修饰符:

    [public/protected/private] [static] [final/abstract] [native] [synchronized]
  • 有返回值的方法需要return语句,返回的值类型必须和方法类型相同

  • 静态方法不能访问非静态。

7.3.2 方法分类

  • 按返回值分:

    • 有返回值(return语句):需要后续使用。

      • return语句可以不声明执行语句 return;
    • 无返回值(void):主要用于设置。
  • 按参数分:

    • 无参数
    • 有参数(1个参数,多个参数)【实参与形参】
  • 按功能分:

    • 实例方法(实例成员方法)

    • 类方法(静态方法)

    • 构造方法(构造函数 / 构造器)

      • 格式:

        public 类名([参数]){...}
      • Java中的每个类都有构造方法,用来初始化该类的一个新的对象。

      • 构造方法的名称和类名相同,并且不返回任何数据类型

      • 系统在创建对象时会自动执行。

      • 构造方法应该包含的内容:

        1)定义一些初值或内存配置工作;

        2)一个类可以有多个构造方法(重载),根据参数的不同决定执行哪一个;

        3)如果程序中没有定义构造方法,则创建实例时使用的是缺省构造方法,它是一个无内容的空实现的构造方法(public 类名() {})。

        例(按功能分):

        public class Test03Function {
        //构造方法
        public Test03Function() {
        System.out.println("构造函数Test03Function()");
        }
        //静态方法
        static void testStatic() {
        System.out.println("静态方法");
        }
        //实例方法
        void testFun() {
        System.out.println("实例方法");
        }
        }

7.3.3 方法调用方式

  • 静态方法:类名.方法名

  • 静态访问非静态的内容:

    创建对象 → 调用(对象名.需要调用的方法或变量

    • 创建对象:

      类名 对象名 = new 类名();
      例:
      Scanner in = new Scanner(System.in);

7.3.4 方法重载

  • 和返回值类型、形参的名称无关,只和参数列表有关。

7.3.5 [ jdk5.0 ] 可变个数形参

[ jdk5.0 之前 ]:数据类型[] 变量名

[ jdk5.0 ] 可变个数形参

采用可变个数形参来定义方法,传入多个相同类型的数据

  1. 格式:

    数据类型 ... 变量名

  2. 可以传入多个参数。

  3. 可变参数的方法与本类中的方法名相同,形参不同的方法之间构成重载。

  4. 与本类中的方法名相同,形参类型也相同的数组之间不构成重载,两者不能共存。

    • 调用时可以用数组形式传递形参。
  5. 声明的位置在形参列表的末尾

  6. 最多只能声明一个可变形参。

八、封装

封装性的体现

  1. 将类的属性私有化。
  2. 不对外暴露私有的方法。
  3. 单例模式。

权限修饰符

private , 缺省(default) , private , protected

修饰符 类内部 同一个包 不同包的子类 同一个工程
private
缺省
protected
public
  • 对于 class 的修饰只能使用 public缺省
  • 可以用来修饰属性、方法、构造器、内部类(缺省、public)。

九、继承

关键字 extends

class A extends B{}

作用

子类可以继承父类的非私有内容

继承性的优点

​ ① 减少代码冗余,提高代码复用性。

​ ② 便于功能的拓展。

​ ③ 为多态性的使用,提供了前提。

9.1 格式

​ 格式: class A extends B {}

​ ① A:子类、派生类、subclass

​ ② B:父类、超类、基类、superclass

​ ③ 子类A 中获取了 父类B 中声明的结构:属性和方法。但是父类中,私有( private )的属性和方法不能直接调用

9.2 *注意

  • 一个类可以被多个类继承。
  • 单继承性:一个类只能有一个父类。
  • 子父类是相对的概念。
  • 子类直接继承的父类:直接父类;间接继承的父类:间接父类。
  • 子类获取直接父类和所有简介父类中声明的属性和方法。

9.3 Object 类

Object

  • 如果一个类没有显式声明父类,则此类继承于 java.lang.Object 类。
  • 所有的 Java类(除了 java.lang.Object 类之外)都直接或间接继承于 java.lang.Object 类。

9.4 方法的重写 (override / overwrite)

  • 定义:在子类中根据需要对父类中继承的方法进行改造。(也称为重置、覆盖)。

    在执行程序时,子类的方法将覆盖父类的方法

  • 应用:

    重写以后,在执行程序时,子类的方法将覆盖父类的方法

  • 重写的规定:

    ​ 方法的声明:

    权限修饰符 返回值类型 方法名(形参列表) throws 异常的类型 {
    // 方法体

    ​ 子类中的是重写的方法,父类中的是被重写的方法

    • 子类重写的方法的 方法名和形参列表 相同。

    • 子类重写的方法的 权限修饰符 不小于 父类被重写的方法。

      • 子类中不能重写父类中 private 的方法。
    • 返回值类型:

      父类被重写的方法的返回值 子类重写的方法的返回值
      void 只能是 void
      A
      Object
      A 类 或者 A 类的子类
      String
      基本数据类型 必须是相同的 基本数据类型
  • 子类重写的方法抛出的异常类型 不大于 父类被重写方法抛出的异常类型。

  • 子类和父类中的同名同参数的方法:

    ​ 或者都声明为 非static 的(考虑重写),

    ​ 或者都声明为 static 的(不是重写)。

9.5 super 关键字

  1. super 可以理解为 "父类的" 。
  2. super 可以用来调用属性、方法、构造器。
  3. 使用
    • 可以在子类的方法或构造器中,使用 super.属性/方法 方式,显式调用父类中声明的属性或方法。但通常情况下省略 super.
    • 特殊情况:当子类和父类中定义了同名的属性时,必须通过显式调用 super.属性 来表示调用的是父类中的属性。
    • 特殊情况2:当子类重写父类的方法以后,调用 父类被重写的方法 时,必须显示调用 super.方法 的方式调用被重写的方法。
  4. super 调用构造器
    • 显式使用 super(形参列表) 的方式调用 父类中声明的指定的构造器。
    • super(形参列表) 必须声明在子类构造器的首行
    • 在类的构造器中,this(形参列表)super(形参列表) 只能二选一,不能同时出现
    • 在构造器的首行,没有显式声明this(形参列表)super(形参列表) 时,则默认调用的是 super()
    • 在类的多个构造器中,至少有一个类的构造器中使用了 super(形参列表) 调用父类中的构造器。

[Java]Java入门笔记(三):类、对象和方法的更多相关文章

  1. Java SE学习笔记 --->高级类特性 ---> toString() 方法

    概述: toString() 方法在面向对象当中十分常见,使用频率很高,和equals() 方法一样,也是Object类中定义的方法. jdk中 源码: java.lang.Object类中ToStr ...

  2. Java IO学习笔记三

    Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...

  3. Java IO学习笔记三:MMAP与RandomAccessFile

    作者:Grey 原文地址:Java IO学习笔记三:MMAP与RandomAccessFile 关于RandomAccessFile 相较于前面提到的BufferedReader/Writer和Fil ...

  4. JAVA之等号、传类对象参数与c++的区别

    在JAVA中用等号对类对象进行赋值,实际上操作的是对象的地址. eg: package MyText; class ClassA { int value; public void seta(int v ...

  5. Java中Date和Calender类的使用方法

    查看文章     Java中Date和Calender类的使用方法 2009-10-04 20:49 Date和Calendar是Java类库里提供对时间进行处理的类,由于日期在商业逻辑的应用中占据着 ...

  6. 《深入Java虚拟机学习笔记》- 第19章 方法的调用与返回

    <深入Java虚拟机学习笔记>- 第19章 方法的调用与返回

  7. Python的高级特性8:你真的了解类,对象,实例,方法吗

    Python的高级特性1-7系列是本人从Python2过渡3时写下的一些个人见解(不敢说一定对),接下来的系列主要会以类级为主. 类,对象,实例,方法是几个面向对象的几个基本概念,其实我觉得很多人并不 ...

  8. Java入门笔记 03-面向对象(下)

    介绍:除了前面介绍的关于类.对象的基本语法之外,下面继续介绍Java面向对象的特性. 一. 包装类: 从JDK 1.5以后,Java就提供了自动装箱和自动拆箱操作,即: 自动装箱:将一个基本类型的变量 ...

  9. Java入门笔记 03-面向对象(上)

    介绍:Java是面向对象的程序设计语言,类是面向对象的重要内容,可以把类当成是一种自定义类型,可以使用类来定义变量,这种类型的变量统称为引用变量.也就是说,所有类都是引用类型.Java也支持面向对象的 ...

  10. java虚拟机入门(三)- 你了解对象吗

    对象对于java程序员来说,那是想要多少就有多少,所以那些嘲笑程序员的单身狗,哼,只有无知使你们快乐,想我大java开发,何曾缺少过对象.我们不仅仅知道创建对象,还知道创建对象的过程是啥样的,不信?往 ...

随机推荐

  1. vmware快速扩容虚拟磁盘

    在使用vmware进行虚拟化的时候,会遇到虚拟磁盘不够用的情况,以前的办法都是使用lvm进行管理扩容,目前在linux上可以实现快速扩容了,具体方法如下: 该方法参考阿里云在线扩容文档:文档地址 其中 ...

  2. 都2022年了,你的前端工具集应该有vueuse

    摘要:一款基于Vue组合式API的函数工具集. 本文分享自华为云社区<vueuse:我不许身为vuer的前端,你的工具集只有lodash!>,作者: 前端要摸鱼 . vueuse 是什么? ...

  3. Cesium中级教程8 - Introduction to Particle Systems 粒子系统入门

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ What is a particle system? 什么是粒子 ...

  4. centos下APUE 例程编译-解决报错与改写例子名字。

    首先是编译生成libapue.a的库文件.按照readme的说法很简单改个目录make一下就好,但是在centos下还是有错.通过下面这篇博文<<UNIX环境高级编程中的apue.h错误& ...

  5. golang中json格式化自定义日期格式

    go 的time.Time,在json序列化是默认 2006-01-02T15:04:05Z07:00 的格式,十分不便, encoding/json包在序列化和反序列化的时候分别调用encode.g ...

  6. String类-intern方法

    1 package cn.itcast.p1.string.demo; 2 3 class StringObjectDemo { 4 public static void main(String[] ...

  7. 集合框架-LinkedList集合练习(堆栈和队列)

    1 package cn.itcast.p2.linkedlist.test; 2 3 import java.util.LinkedList; 4 5 /* 6 * 请使用LinkedList来模拟 ...

  8. ansible roles实践 zookeeper集群部署

    1.下载解压 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11. ...

  9. HTML 基础1

    HTML 超文本标记语言 文件后缀html,htm 标签成对出现:开始标签--结束标签 元素内容位于开始标签--结束标签之间(可以有空内容) 空元素<a/> 大小写不敏感 元素,属性 &l ...

  10. Python中列表操作函数append的浅拷贝问题

    L=int(input())#L位数N=int(input())#N进制row=[]list1=[]for i in range(1,N): row.append(1)list1.append(row ...