java复习回顾

文章目录

  • 0 开发工具
  • 1. 对象和类、三大特性
  • 2. 成员/实例变量和实例变量(this关键字)
  • 3. 方法重载overload
  • 4. 构造方法和this关键字
  • 5. 继承
  • 6. 访问修饰符
  • 7. 方法重写
  • 8. 继承下的构造执行
  • 9. 多态
    • 9.1 向上转型
    • 9.2 向下转型
    • 9.3 多态的应用

0 开发工具

Maven是进行包管理的工具,只需要声明一些配置,程序就可以自动下载所依赖的包。其配置文件在本机电脑~\.m2\settings.xml中,settings.xml里面声明了依赖包存放的位置,也可以在里面声明下载依赖包的国内镜像地址。

idea中自带了jdk,无需额外安装。
Git可用来进行版本控制

1. 对象和类、三大特性

面向对象的思想object oriented programming:一切皆对象,对象由属性和方法构成。
类相当于一个模板,对象是由类创建出来的,每个对象都是类的一个实例,创建对象的过程也称为实例化。

封装:把一些对象的共同属性、方法抽象出来,合理的封装,抽象成类。
继承:子类享有父类的属性和方法,并且还存在一定的属性和方法的扩展
多态:有两种意义的多态。一种是操作名称的多态,即有多个操作具有相同的名字,但这些操作所接收的参数类型必须不同。 另一种多态是和继承有关的多态,是指同一个操作被不同类型对象调用时可能产生不同的行为。

2. 成员/实例变量和实例变量(this关键字)

成员变量也叫实例变量。
在这里插入图片描述

// 该例子展示了实例/成员变量、局部变量的作用范围
// 以及this关键字的使用:this指向当前对象
public class Dog {String name;public Dog(){ // 构造方法name="汪汪";}public void eat(){String name="局部变量汪汪";System.out.println(name+"在吃东西");//name=局部变量汪汪System.out.println(this.name+"在吃东西");//name=汪汪}public void sleep(){System.out.println(name+"在睡觉");//name=汪汪}public String getName() {return name; //name=汪汪}
}

3. 方法重载overload

方法重载overload:一个类中定义多个具有相同名字的方法,具体执行哪个,由传入的参数决定。即方法名字相同,参数列表不同(类型、个数、顺序),与返回值类型、访问修饰符无关。
System.out.println();是一个经典的重载方法。

//方法重载举例
public class ClassTest {public void test(int a){}public void test(String a){}public void test(int a,String b){}public void test(String a,int b){}
}

4. 构造方法和this关键字

构造方法:类中的特殊方法,主要用于创建对象。

  • 名称与类名相同
  • 没有返回类型
  • 创建对象时,出发构造方法
  • 编译器默认执行一个无参的构造方法
  • 构造方法也可以重载,遵循重载规则
public class ThisTest {public static void main(String[] args) {ThisDog dog=new ThisDog("汪汪",5,"公");System.out.println(dog.name+"---"+dog.age+"---"+dog.sex);}
}
public class ThisDog {String name;int age;String sex;public ThisDog(String name,int age){this.name=name;this.age=age;}public ThisDog(String name,int age,String sex){this(name,age); //this调用重载的构造方法只能放在第一行this.sex=sex;}
}

5. 继承

语法:class子类 extends 父类{ } //定义子类时,显式继承父类。所有的类默认都继承Object
应用:子类可以使用父类中的属性和方法,也可定义自己独有的属性和方法。
优势:提高了代码的复用性和可扩展性。
特点:单继承(一个子类只能有一个直接父类);多重继承(类之间可以多级继承,如C类可以继承A类、B类中所有的属性和方法)
在这里插入图片描述
注意:父类的私有属性可以被继承但不能被直接访问(可借助其他工具观察内存分布,可知父类的私有属性可以被继承。父类的私有属性可通过get、set方法访问)。
当父类和子类具有相同的属性时,使用super和this关键字区分。

在这里插入图片描述

父类的私有属性可通过get、set方法访问

public class A {private int a;public void setA(int a) {this.a = a;}public int getA() {return a;}public void show() {System.out.println("父类的show方法");}
}
public class B extends A{public B(){setA(1);}public void show(){System.out.println(getA()+" 子类的show方法");}
}
public class Test {public static void main(String[] args) {B b=new B();b.show();}
}
//输出: 1 子类的show方法

6. 访问修饰符

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。

  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
  • public : 对所有类可见。使用对象:类、接口、变量、方法
  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。

我们可以通过以下表来说明访问权限:
在这里插入图片描述
默认访问修饰符-不使用任何关键字
如果在类、变量、方法或构造函数的定义中没有指定任何访问修饰符,那么它们就默认具有默认访问修饰符。

默认访问修饰符的访问级别是包级别(package-level),即只能被同一包中的其他类访问。

7. 方法重写

前提A是父类,B extends A
有以下规则和特点:

  1. 子类方法的访问权限可以比父类大
  2. 子类方法的返回值类型可以和父类一致,也可以是父类返回类型的子类
  3. 方法名一定要完全一样
  4. 参数列表也必须和父类完全一样(否则就成方法重载了)
  5. 子类重写父方法后,优先执行子类方法。若想要执行父类中被重写 的方法,使用super关键字
//父类A中的show方法
protected A show() {System.out.println("父类的show方法");return null;
}
//子类B中的show方法,B extends A,public > protected,B < A
public B show(){super.show();System.out.println("子类的show方法");return null;
}
public class Test {public static void main(String[] args) {B b=new B();b.show();}
}
/*输出:
父类的show方法
子类的show方法
*/

8. 继承下的构造执行

要想构造子类,必先调用父类构造方法,但并未构建一个父类对象,构建的是子类对象

// 无参构造方法
package example05;public class Test {public static void main(String[] args) {new C();}
}
class A{public A(){System.out.println("A的构造方法");}
}
class B extends A{public B(){System.out.println("B的构造方法");}
}
class C extends B{public C(){System.out.println("C的构造方法");}
}
//output:
//A的构造方法
//B的构造方法
//C的构造方法

要想构造子类,必先调用父类构造方法,但并未构建一个父类对象,构建的是子类对象。其空间分布如下:
其判断具体见下面代码中的注释掉的输出,均为true。
一个子类对象可以是一个父类类型,但一个父类对象不能是一个子类类型。如b是B的一个对象,c是C的一个对象,b instanceof C=false,c instanceof B=true

//        System.out.println(this instanceof B);// true,一个子类类型可以是一个父类类型
//        System.out.println(this instanceof C);// true

在这里插入图片描述

// 有参构造方法
package example06;public class Test {public static void main(String[] args) {C c=new C(7,8,9);System.out.println(c.a+"---"+c.b+"---"+c.c);}
}
class A{int a=1;public A(int a){this.a=a;System.out.println("A的构造方法");}
}
class B extends A{int b=2;public B(int a,int b){super(a);this.b=b;System.out.println("B的构造方法");
//        System.out.println(this instanceof B);// true
//        System.out.println(this instanceof C);// true}
}
class C extends B{int c=3;public C(int a,int b,int c){super(a,b);this.c=c;System.out.println("C的构造方法");}
}
//输出
//A的构造方法
//B的构造方法
//C的构造方法
//7---8---9

9. 多态

以下所举例子,均以A是父类,B extends A,C extends B为前提。

9.1 向上转型

父类引用指向子类对象,从而形成多态。
父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法。
A a=new B(); A a是父类引用(引用类型),new B()产生了一个子类对象(对象类型),a只能调用A中的方法/属性,不能调用B中的方法/属性。也就是a.属性/方法()必须在类A中存在。
若子类B没有重写A的show方法,输出父类A的show方法。若调用a.showB()会报错,因为父类A中并没有showB方法

package example06;public class Test {public static void main(String[] args) {A a=new B();a.show();
//        a.showB(); //报错}
}
class A{public void show(){System.out.println("父类A的show方法");}
}class B extends A{public void show(){System.out.println("子类B的show方法");}public void showB(){System.out.println("子类B的showB方法");}
}//输出:子类B的show方法

9.2 向下转型

将父类引用中的真实子类对象,强制转换为子类本身对象,称为向下转型。

A a=new B();
B b=(B) a;//强制类型转换

向下转型前,应判断引用中的对象的真实类型(使用instanceof来判断),保证类型转换的正确性。

9.3 多态的应用

应用一:使用父类作为方法形参实现多态,使方法参数的类型更广泛。
应用二:使用父类作为方法返回值实现多态,使方法可以返回不同子类对象。

package example08;public class Person {public void feed(Pet pet){//多态的应用一,Pet作为方法形参pet.eat();}public Pet getPet(String type){//多态的应用二,返回的是Petif(type.equals("dog")){return new Dog();}else{return new Cat();}}public static void main(String[] args) {Person person=new Person();Pet pet=person.getPet("dog");person.feed(pet);//多态的应用二person.feed(new Cat());//多态的应用一,可以改成new别的,如Dog}}
class Pet{public void eat(){System.out.println("在吃东西");}
}class Dog extends Pet{public void eat(){System.out.println("狗狗在啃骨头");}
}
class Cat extends Pet{public void eat(){System.out.println("猫咪在吃鱼");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/92921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Acwing 907. 区间覆盖

Acwing 907. 区间覆盖 知识点题目描述思路讲解代码展示 知识点 贪心 题目描述 思路讲解 代码展示 #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n;struct Range {int l, r;bool operator < (const Range &W) …

分页前后端完整代码

一、后端代码 User实体类要继承PageVo package com.like.entity;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.like.common.PageVo; import…

借助ChatGPT的神奇力量,解锁AI无限可能!

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前学习C/C、算法、Python、Java等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL&…

计算机毕业设计 基于SSM的宿舍管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

时间序列-AR模型与MA模型的原理与实现

文章目录 1 自回归模型AR Model1.1 自回归模型 vs 多元线性回归模型1.1.1 线性回归1.1.2 AR(1)模型1.1.3 AR(p)模型 1.2 AR建模问题 2 移动平均模型 MA Model2.1 MA模型的数学表示2.1.1 MA(1)模型2.2.2 MA(q)模型 2.2 MA建模问题 ARIMA模型是AR模型&#xff08;自回归模型&…

使用 Python 给 PDF 添加目录书签

0、库的选择——pypdf 原因&#xff1a;Python Version Support Python 3.11 3.10 3.9 3.8 3.7 3.6 2.7 pypdf>3.0 YES YES YES YES YES YES PyPDF2>2.0 YES YES YES YES YES YES PyPDF2 1.20.0 - 1.28.4 YES YES YES YES YES YES P…

91、Redis - 事务 与 订阅-发布 相关的命令 及 演示

★ 事务相关的命令 Redis事务保证事务内的多条命令会按顺序作为整体执行&#xff0c;其他客户端发出的请求绝不可能被插入到事务处理的中间&#xff0c; 这样可以保证事务内所有命令作为一个隔离操作被执行。 Redis事务同样具有原子性&#xff0c;事务内所有命令要么全部被执…

年度顶级赛事来袭:2023 CCF大数据与计算智能大赛首批赛题上线!

久等了&#xff01; 大数据与人工智能领域年度顶级盛事——2023 CCF大数据与计算智能大赛——首批赛题已上线&#xff0c;大赛火力全开&#xff0c;只等你来挑战&#xff01; 大赛介绍 CCF大数据与计算智能大赛&#xff08;CCF Big Data & Computing Intelligence Contes…

深入学习git

1、git原理及整体架构图 一些常用的命令 git add . 或 git add src/com/ygl/hello/hello.java 指定文件 git commit . 或 git commit src/com/ygl/hello/hello.java 指定文件 git push origin 分支名称 2、git stash的应用场景 场景一&#xff1a;你正在当前分支A开发&…

多目标平衡黏菌算法(MOEOSMA)求解八个现实世界受约束的工程问题

目录 1 受约束的工程问题 1.1 减速器设计问题(Speed reducer design problem) 1.2 弹簧设计问题(Spring design problem) 1.3 静压推力轴承设计问题(Hydrostatic thrust bearing design problem) 1.4 振动平台设计问题(Vibrating platform design problem) 1.5 汽车侧面碰…

云安全【阿里云ECS攻防】

关于VPC的概念还请看&#xff1a;记录一下弹性计算云服务的一些词汇概念 - 火线 Zone-安全攻防社区 一、初始化访问 1、元数据 1.1、SSRF导致读取元数据 如果管理员给ECS配置了RAM角色&#xff0c;那么就可以获得临时凭证 如果配置RAM角色 在获取ram临时凭证的时候&#xff…

铁道货车通用技术条件

声明 本文是学习GB-T 5600-2018 铁道货车通用技术条件. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 90 mm90 mm。 B.2 制造要求 B.2.1 车体钢结构组成后&#xff1a; a) 敞车钢质侧、端板的平面度公差应小于或等于15 mm/m; 压型侧、端板的平面度…

python生成中金所期权行权价

参考沪深300股指期权的合约表&#xff0c;写一个工具函数&#xff1a; 使用方法 def get_format_option_gap(value: float, deviation: int 0): # 根据中证1000指数获取点位"""根据标准的行权价&#xff0c;生成不同档位的期权列表&#xff0c;适合中金所:…

[红明谷CTF 2021]write_shell %09绕过过滤空格 ``执行

目录 1.正常短标签 2.短标签配合内联执行 看看代码 <?php error_reporting(0); highlight_file(__FILE__); function check($input){if(preg_match("/| |_|php|;|~|\\^|\\|eval|{|}/i",$input)){ 过滤了 木马类型的东西// if(preg_match("/| |_||php/&quo…

最新AI智能创作系统源码V2.6.2/AI绘画系统/支持GPT联网提问/支持Prompt应用

一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的AI智能问答系统和AI绘画系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图…

验证曲线(validation_curve)项目实战

验证曲线 validation_curve 一、简介 validation_curve验证曲线&#xff0c;可确定不同参数值下的训练和测试分数 根据指定参数的不同值计算估计器的得分 这与使用一个参数的网格搜索类似。不过&#xff0c;这也会计算训练得分&#xff0c;只是一个用于绘制结果的工具。 二、…

【AI视野·今日Robot 机器人论文速览 第四十五期】Mon, 2 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Mon, 2 Oct 2023 Totally 42 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Learning Decentralized Flocking Controllers with Spatio-Temporal Graph Neural Network Authors Siji Chen, Yanshen Sun, …

R语言中更改R包安装路径

看到这些包下载到我的C盘&#xff0c;我蛮不爽的&#xff1a; 所以决定毫不犹豫的改到D盘&#xff1a; 首先&#xff0c;我们需要在RStudio中新建一个初始启动文件&#xff1a; file.edit(~/.Rprofile) 然后去你喜欢的环境新建一个文件夹存放安装的包的位置&#xff0c;我喜欢…

uboot启动流程-涉及board_init_f 函数

一. uboot启动流程 _main 函数中会调用 board_init_f 函数&#xff0c;本文简单分析一下 board_init_f 函数。 二. board_init_f 函数 board_init_f 函数主要有两个工作&#xff1a; (1) 初始化一系列外设&#xff0c;比如串口、定时器&#xff0c;或者打印一些消息等。…

动态规划算法(2)--最大子段和与最长公共子序列

目录 一、最大子段和 1、什么是最大子段和 2、暴力枚举 3、分治法 4、动态规划 二、最长公共子序列 1、什么是最长公共子序列 2、暴力枚举法 3、动态规划法 4、完整代码 一、最大子段和 1、什么是最大子段和 子段和就是数组中任意连续的一段序列的和&#xff0c;而…