首页 > 编程语言 >Java学习面向对象Day02

Java学习面向对象Day02

时间:2023-08-07 20:11:38浏览次数:34  
标签:Java 访问 继承 子类 成员 面向对象 Day02 父类 方法

面向对象Day02-继承

一、继承

1.1 生活中的继承

  1. 皇位继承 ------------------------ 儿子不需要打江山,可以直接坐江山

    1. 努尔哈赤 ---------------------东三省 做主的范围 东三省

    2. 皇太极-----------------------继承的努尔哈赤 可以直接对东三省做主 自己打下了内外蒙古 做主范围 东三省 + 内外蒙古

    3. 顺治 -------------------------继承了皇太极 可以直接对东三省+ 内外蒙古做主 自己打下了汉地十八省 做主范围 东三省 + 内外蒙 + 汉地十八省

    4. 康熙---------------------------继承顺治 可以直接对东三省 + 内外蒙 + 汉地十八省做主,自己打下了台湾,准格尔汗国 做主范围 东三省 + 内外蒙 + 汉地十八省 + 台湾 + 准格尔汗国

    5. 雍正 -------------------------- 继承康熙 做主范围 东三省 + 内外蒙 + 汉地十八省 + 台湾 + 准格尔汗国

    6. 乾隆 -------------------------继承雍正 直接做主 东三省 + 内外蒙 + 汉地十八省 + 台湾 + 准格尔汗国, 打下了新疆,加强了对西藏的管理 , 做主范围东三省 + 内外蒙 + 汉地十八省 + 台湾 + 准格尔汗国 + 新疆 + 西藏

       

      子类可以操作父类中允许被操作的属性和方法,也可以操作自己独有的属性和方法

      父类仅可以操作父类中允许被操作的属性和方法,不可以操作子类独有的属性和方法

       

  2. 财产继承 ------------------------- 儿子不需要挣家业,可以自由支配家业

  3. 工作继承 -------------------------- 儿子不需要找工作,可以直接上班领工资

1.2 Java中的继承

  1. 理解:如果一些类中的属性和方法是相同的,那么可以把这些类中相同的属性和方法提取到一个新的类中,然后利用extends关键字让原来的类和新类产生联系,这种联系称之为继承,而这个时候原来的类就是子类,也叫派生类; 新的类称之为父类,也叫基类或者超类

  2. 作用:提高代码复用性

  3. 通过extends关键字实现继承

  4. 超类/ 基类/父类: 共有的属性和方法

  5. 派生类/子类: 特有的属性和方法

  6. 可以访问

    1. 子类可以访问:父类的属性和方法 + 子类的属性和方法

    2. 父类可以访问: 只能访问父类的属性和方法,不能访问子类的属性和方法

  7. 具有传递性

  8. 注意事项

    1. 一个父类可以有多个子类,一个子类只能有一个父类 -----------------继承的单一性

    2. 通过继承,子类可以继承父类全部的数据域,但是只有一部分数据域对子类可见,所以子类也只能使用这一部分数据域

      1. 子类可以继承父类的全部非静态的属性和非静态的方法(包括私有的和公共的)<Java官方文档明确表明:父类私有属性和私有方法子类不能继承>

        但是私有属性不能直接访问,可以通过get,set方法间接访问,私用方法不能直接调用,私有方法也不可以直接使用

      2. 子类可以直接使用父类非私有的属性和方法

  9. 优点

    1. 提高代码的复用性

    2. 提高安全性,避免方法产生混乱

    3. 统一结构

    练习:

     学生类:
      成员属性:姓名,年龄,家庭住址,学号,班级
      成员方法:学习,吃饭, 睡觉 说话
     教师类:
      成员属性:姓名,年龄,家庭住址,工资
      成员方法:讲课,吃饭, 睡觉 说话
     医生类:
      成员属性:姓名,年龄,家庭住址,级别(title)
      成员方法:做手术,吃饭, 睡觉 说话
     
     is a
     ​
     ​
     狗是一只宠物
     猫是一只宠物
     兔子是一只宠物
     ​
     狗是一个人 ,  
     ​
     Person
     Dog
     Animal

 

二、访问修饰符

  1. 使用范围

    关键字**本类中同包类中其他包子类其他任意类中
    public 可以 可以 可以 可以
    protected 可以 可以 可以  
    默认的 可以 可以    
    private 可以      
  2. 注意事项

    1. 权限修饰符的范围从大到小依次是: public > protected > 默认的 > private

    2. 需要注意的是,默认的权限修饰符只能在本类及同包类中使用,同包子类本质上依然是同包类

    3. protected 在子类中可以使用指的是子类的对象可以访问父类的成员,但是在非同包子类中子类的对象可以访问父类的成员,但是父类的对象不能访问父类的成员

 

三、方法的重写

  1. 应用场景:子类可以继承父类中的方法,而不需要重新编写相同的方法,但是有时候子类并不想原封不动的继承父类的方法或者父类的方法不能满足子类的使用,此时子类需要将父类的方法做出一定的修改(修改方法体)这就需要使用到方法的重写,方法的重写也叫方法的覆盖。

  2. 概念:在父子类中存在方法签名(方法名+参数列表)完全一致的非静态方法,就构成了方法的重写(覆盖)

  3. 遵循原则:方法的重写要遵循“两同两小一大”原则

    1. 方法签名完全一致

    2. 如果父类中的返回值是基本数据类型/void/最终类(被final修饰)那么子类中要重写的方法的返回值类型必须一致(如果父类中的方法被private修饰的话,子类是无法继承这个方法的,即使子类重新定了这个方法,也不能叫重写)

    3. 如果父类的方法返回值类型是一个引用类型,子类方法的返回值类型是父类方法的返回值类型,或者是父类的返回值类型的子类类型

      image-20230807150700774

    4. 子类方法的访问修饰符的范围要大于等于父类的访问修饰符的权限范围

    5. 子类方法抛出的异常类型小于或等于父类方法抛出的异常范围

    6. 简要概括

      1. 两同

        1. 方法签名一致: 方法名相同,参数列表相同

      2. 两小

        1. 子类方法的返回值类型小于或等于父类方法的返回值类型

        2. 子类方法抛出的异常类型比父类方法抛出的异常类型小于或等于

      3. 一大

        子类的访问修饰符权限大于等于父类

 

四、super 关键字

  1. super关键在表示在子类中对父类对象的引用,可以看做是一个虚拟对象

  2. 在子类中可以通过super调用父类的非静态属性和非静态方法

  3. 在子类的构造方法中,可以通过super关键字调用父类中对应形式的构造犯法,如果不指定,默认调用服了中的无参构造

  4. 如果父类中提供了含参的构造方法,那么子类必须手动定义super()语句来调用父类中对应形式的含参构造

  5. super()语句必须放在构造方法的第一行,所以super()语句不能和this()语句一起出现

五、补充

  1. 泛化: 从程序设计的角度而言叫做泛化,从代码实现的角度来说就叫继承,泛化就是继承。

  2. 继承要符合 is a 的关系

    1. 一个学生是一个人 对 class Student extends Persion{} 没问题

    2. 一个老师是一个人 对 class Teacher extends Person{} 没问题

    3. 一只猫是一个宠物 对 class Cat extends Pet{} 没问题

    4. 一个医生是一只宠物 不对 class Docter extends Pet{} 是不对的

  3. 继承是子类继承父类的成员变量和普通方法,不包括父类的构造方法,父类的构造方法是被子类通过super()来调用的,而不是继承的

 

 

 

 

 

 

 

 

 

 

 

 

笔试题

  1. 请介绍全局变量和局部变量的区别

    参考答案

    Java中的变量分为成员变量和局部变量,它们的区别如下:

    成员变量:

    1. 定义范围:定义在类中

    2. 作用范围:整个类

    3. 内存位置:堆中, 堆会赋予初始值

    4. 生命周期:在对象被创建的时候被创建,在对象被销毁的时候被销毁

    5. 未被static修饰的成员变量也叫实例变量,它存储于对象所在的堆内存中,生命周期与对象相同;

    6. 被static修饰的成员变量也叫类变量,它存储于方法区中,生命周期与当前类相同。

    局部变量:

    1. 定义范围:定义在方法中

    2. 作用范围:对应的方法或者语句块

    3. 内存位置:存储在栈中,不会默认初始化,需要手动赋值

    4. 生命周期:在方法被调用或者语句块执行的时候被创建,方法或语句块执行完毕即被销毁

    注意事项

    Java中没有真正的全局变量,面试官应该是出于其他语言的习惯说全局变量的,他的本意应该是指成员变量。

  2. 请介绍一下实例变量的默认值

    参考答案

    实例变量若为引用数据类型,其默认值一律为null。若为基本数据类型,其默认值如下:

    • byte:0

    • short:0

    • int:0

    • long:0L

    • float:0.0F

    • double:0.0

    • char:'\u0000'

    • boolean:false

    注意事项

    上述默认值规则适用于所有的成员变量,所以对于类变量也是适用的。

  3. 说一说你对Java访问权限的了解

    参考答案

    Java语言为我们提供了三种访问修饰符,即private、protected、public,在使用这些修饰符修饰目标时,一共可以形成四种访问权限,即private、default、protected、public,注意在不加任何修饰符时为default访问权限。

    在修饰成员变量/成员方法时,该成员的四种访问权限的含义如下:

    • private:该成员可以被该类内部成员访问;

    • default:该成员可以被该类内部成员访问,也可以被同一包下其他的类访问;

    • protected:该成员可以被该类内部成员访问,也可以被同一包下其他的类访问,还可以被它的子类访问;

    • public:该成员可以被任意包下,任意类的成员进行访问。

    在修饰类时,该类只有两种访问权限,对应的访问权限的含义如下:

    • default:该类可以被同一包下其他的类访问;

    • public:该类可以被任意包下,任意的类所访问。

标签:Java,访问,继承,子类,成员,面向对象,Day02,父类,方法
From: https://www.cnblogs.com/swz20020720/p/17612615.html

相关文章

  • Java中的深拷贝浅拷贝
    在计算机内存中,每个对象都有一个地址,这个地址指向对象在内存中存储的位置。当我们使用变量引用一个对象时,实际上是将该对象的地址赋值给变量。因此,如果我们将一个对象复制到另一个变量中,实际上是将对象的地址复制到了这个变量中。浅拷贝是指将一个对象复制到另一个变量中,但是只......
  • 【Java】从头开始的Java复健day2
    用的书:《Java从入门到精通》day1(3.1-3.3):【Java】从头开始的Java复健day1第三章Java语言基础3.4运算符赋值运算符=如果一个表达式中有两个以上的“=”,会从最右方的“=”开始处理算术运算符加法+减法-乘法*除法/(0不能当除数)取余%自增自减++a:先+1再使用a--a......
  • Java中抽象类和接口
    修饰符:抽象类中的抽象方法可以有public、protected和default这些修饰符,而接口中默认修饰符是public。不可以使用其它修饰符。一般来说,接口中不考虑Java8中default方法,没有实现的代码。抽象类可以定义抽象方法和非抽象方法。 接口和抽象类的职责不一样。接口主要用于制定规范。......
  • JavaHTTP心跳:服务器与客户端实时连接的实现方式
    JavaHTTP心跳:服务器与客户端实时连接的实现方式在网络通信中,实时连接是一种至关重要的功能。它允许服务器与客户端之间保持持久的通信信道,实现快速、高效的数据传输。对于Java开发者来说,实现服务器与客户端之间的实时连接可以通过JavaHTTP心跳技术来实现。本文将介绍如何利用Java......
  • Java HTTP请求封装的方法及实现
    JavaHTTP请求封装的方法及实现在Java开发中,我们经常需要与服务器进行数据交互,发送HTTP请求是其中常见的一种方式。为了简化开发过程,我们可以封装HTTP请求的方法,让调用者只需要关注业务逻辑而不用关心底层的细节实现。本文将介绍一种基于Java的HTTP请求封装方法及其实现。JavaHT......
  • Java HTTP多线程下载实现方法
    JavaHTTP多线程下载实现方法在如今互联网高速发展的时代,对于下载来说,速度是一个非常重要的因素。而多线程下载是一种提高下载速度的常见方法。本文将介绍如何使用Java编程实现HTTP多线程下载功能。JavaHTTP多线程下载实现方法一、背景知识在开始实现之前,我们需要了解一些基本......
  • JavaSwing实现验证码功能
    JavaSwing实现验证码功能在Web应用程序开发中,验证码(CAPTCHA)是一种常见的安全措施,用于防止自动化机器人和恶意软件对网站进行攻击。本文将介绍如何使用JavaSwing来实现验证码功能,以帮助您加强Web应用程序的安全性。JavaSwing实现验证码功能一、什么是验证码?验证码是一种通过人......
  • Java Web Service Get请求使用指南
    JavaWebServiceGet请求使用指南在当今互联网时代,WebService已经成为了现代软件开发中不可或缺的一部分。而Java作为一种广泛使用的编程语言,自然也提供了丰富的工具和库来支持WebService的开发。本文将为大家介绍如何使用Java编程语言进行WebService的Get请求。JavaWebserv......
  • 【金九银十面试冲刺】Android岗面试题每日分享——Java篇
    一、Java异常机制中,异常Exception与错误Error区别这道题想考察什么?在开发时需要时候需要自定义异常时,应该选择定义Excption还是Error?编写的代码触发Excption或者Error分别代表什么?考察的知识点Java异常机制考生应该如何回答在Java中存在一个Throwable可抛出类,Throwable有两个重要的......
  • JavaOpenCV相似度计算基础教程
    JavaOpenCV相似度计算基础教程JavaOpenCV是一个基于开放源代码的计算机视觉库,它可以实现许多计算机视觉任务,如图像处理、物体识别和图像相似度计算等。本教程旨在向您介绍JavaOpenCV中的相似度计算基础,帮助您理解如何使用该库计算图像之间的相似度。JavaOpenCV相似度计算基础教程图......