【零基础??天速成 Java】Day2 - 初识面向对象

目录

前言

1. 可变参数的使用

2. 构造器

3. 包

1、包的创建

2、包的使用

3、包的命名规范

4、常用的包

5. 访问修饰符

6. 继承 

7. super 关键字

8. 方法重写 Override

写在最后:


前言

我的 java 基础学习,跟的是韩顺平的 java 课程~

本篇文章涵盖视频 216 ~ 305 集里面 java 与 C++ 不同的知识点~ 

1. 可变参数的使用

java 支持可变参数,当你需要传递些值,而这些值的类型相同的时候,

可以使用可变参数来传递,来看例子:

public class VarMethod {
	public static void main (String[] args) {
		HspMethod m = new HspMethod();
		System.out.print(m.Sum(1, 5, 10));
	}
}

class HspMethod {
	// 我们可以把 nums 看成是一个数组
	int Sum(int... nums) {
		int sum = 0;
		for(int i = 0; i < nums.length; i++) {
			sum += nums[i];
		}
		return sum;
	}
}

我们可以把接收可变参数的那个参数 nums 当成是一个数组,

这样就能随意计算任意个整形值相加了。

输出:

可以看到输出没有问题。

这里要注意一些细节问题,

1、可变参数可以是0 个或者多个;

2、如果它和普通参数在一起,必须把可变参数放在最后;

3、一个形参列表只能出现一个可变参数。

2. 构造器

java 的构造器跟 C++ 的构造函数几乎一模一样,

我们可以来看一下构造器的语法:

public class Construct {
	public static void main(String[] args) {
		Person p = new Person("张三", 18);
		System.out.print(p._name + (p._age + ""));
	}
}

class Person {
	String _name;
	int _age;

	public Person(String name, int age) 
	{
		_name = name;
		_age = age;
	}
}

输出:

其他方面就跟 C++ 基本上没有区别了。

3. 包

1、包的创建

java 的包是根据目录来区分的,

在 IDEA 中建包,使用 '.' 作为一级目录的分隔符:

比如在 src 目录下,我们建了两个包,一个是 com.a,一个 com.b,就是这样的效果:

这样子我们就可以创建两个同名的类而不冲突了:

2、包的使用

我们来写一段代码调用一下这两个包:

package com.use;

import com.a.Dog;

public class Use {
    public static void main(String[] args) {
        Dog da = new Dog();
        System.out.println(da);

        com.b.Dog db = new com.b.Dog();
        System.out.println(db);
    }
}

可以发现使用第一个 a 包的时候自动 import 了,而使用 b 包的时候,

他在前面带上了 com.b。

3、包的命名规范

一般而言,是:

com.公司名.项目名.业务模块名。

4、常用的包

java.lang 基本包,自动包含了。

java.util 包含系统常用的工具,比如 Scanner。

java.net 网络包,网络开发

java.awt 做 java 页面开发的,GUI 

5. 访问修饰符

1、用 public 修饰,对外公开

2、用 protected 修饰,对子类和同一个包中的类公开

3、默认(不修饰),对同一个包的类公开

4、用 private 修饰,只有类本身可以访问,不对外公开

老韩有一张图:

6. 继承 

继承的语法:

class 子类 extends 父类 {

}

注意:

1)子类会自动拥有父类定义的属性和方法(前提是由 public 和 protected 修饰)

2)父类又叫做超类,基类。

3)子类又叫做派生类。

这里还是写一段代码举个例子吧~

public class Extend {
    public static void main(String[] args) {
        Student student = new Student();
        student.Speak();
    }
}

class Person {
    protected String _name;
    protected int _age;
    protected int _money;

    public void Speak() {
        System.out.println("hello exthend!");
    }
}

class Student extends Person {
    private int _id;
}

子类 Student 继承 父类 Person。

继承相关的细节:

1)子类对象会默认调用父类的默认构造器,如果想要指定就需要用到 super

举个例子:

public class Extend {
    public static void main(String[] args) {
        Student student = new Student();
    }
}

class Person {
    protected String _name;
    protected int _age;
    protected int _money;
    Person() {
        System.out.println("Person()");
    }

    Person(String name) {
        _name = name;
        System.out.println("Person(String name)");
    }
    public void Speak() {
        System.out.println("hello exthend!");
    }
}

class Student extends Person {
    private int _id;
    public Student() {
        super("张三");
        System.out.println("Student()");
    }
}

这里使用 super 就能指定调用父类的有参构造了。

2)super() 和 this() 都只能放在构造器第一行(他们不能共存)

this() 可以让默认构造器调用其他重载的构造器。

3)使用 Ctrl + h 可以看类的继承关系,注意所有类都是 Object 类的子类

来看演示:

4)子类最多只能继承一个父类(java 是单继承体系)

那如果我们又想要 A 类,又想要 B 类咋办?

可以让 A 类先继承 B类,然后我们再继承 A 类也能够实现。 

7. super 关键字

super 代表的是父类的引用,用于访问父类的属性,方法,构造器

super.属性名;可以访问父类属性

super.方法名(参数列表);可以访问父类方法

super(参数列表);可以访问父类构造器(只能放在构造器第一行)

需要注意的细节:

1)如果出现方法同名,需要用 super 才能调用,如果没有同名直接用就行。

2)super 的访问不局限在父类,爷爷类之上也可以,不过 super 遵循就近原则。

这里是 super 与 this 的比较:

8. 方法重写 Override

java 的方法重写和 C++ 的是一样的,

就是子类方法的参数,返回值,方法名称和父类方法相同,就是方法重写。

不过有一些注意事项:

1)子类方法不能缩小父类方法的访问权限。

2)方法重写和重载的区别分析:

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【腾讯云Cloud Studio实战训练营】React 快速构建点餐页面

前言&#xff1a; Cloud Studio是一个在线的云集成开发环境&#xff08;IDE&#xff09;&#xff0c;可以让开发人员在浏览器中轻松地开发、测试、调试和部署应用程序。它提供了基于云的计算资源和工具&#xff0c;例如代码编辑器、编译器、调试器、版本控制系统和项目管理工具…

Spring Boot2.xx开启监控 Actuator

spring boot actuator介绍 Spring Boot包含许多其他功能&#xff0c;可帮助您在将应用程序推送到生产环境时监视和管理应用程序。 您可以选择使用HTTP端点或JMX来管理和监视应用程序。 审核&#xff0c;运行状况和指标收集也可以自动应用于您的应用程序。 总之Spring Boot Ac…

8月8日上课内容 研究nginx组件rewrite

location 匹配uri location 匹配的规则和优先级。&#xff08;重点&#xff0c;面试会问&#xff0c;必须理解和掌握&#xff09; nginx常用的变量&#xff0c;这个要求掌握 rewrite&#xff1a;重定向功能。有需要掌握&#xff0c;有需要理解的。 location匹配&#xff1a;…

用Vue实现页面访问拦截

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 页面访问拦截 1.创建axios实例 2.添加拦截器 3.全局前置守卫 可选的第三个参数 next 总结&#xff1a…

状态模式(C++)

定义 允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。 应用场景 在软件构建过程中&#xff0c;某些对象的状态如果改变&#xff0c;其行为也会随之&#xff0c;而发生变化&#xff0c;比如文档处于只读状态&#xff0c;其支持的行为和读写…

使用 Python 和 Flask 构建简单的 Restful API 第 1 部分

一、说明 我将把这个系列分成 3 或 4 篇文章。在本系列的最后&#xff0c;您将了解使用flask构建 restful API 是多么容易。在本文中&#xff0c;我们将设置环境并创建将显示“Hello World”的终结点。 我假设你的电脑上安装了python 2.7和pip。我已经在python 2.7上测试了本文…

无涯教程-Perl - fcntl函数

描述 该函数是系统fcntl()函数的Perl版本。使用FILEHANDLE上的SCALAR执行FUNCTION指定的功能。 SCALAR包含函数要使用的值,或者是任何返回信息的位置。 语法 以下是此函数的简单语法- fcntl FILEHANDLE, FUNCTION, SCALAR返回值 该函数返回0,但如果fcntl()的返回值为0,则返…

【Go语言】Golang保姆级入门教程 Go初学者chapter2

【Go语言】变量 VSCode插件 setting的首选项 一个程序就是一个世界 变量是程序的基本组成单位 变量的使用步骤 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zuxG8imp-1691479164956)(https://cdn.staticaly.com/gh/hudiework/imgmain/image-20…

CAD随机球体颗粒过渡区3D插件

插件介绍 CAD随机球体颗粒&过渡区3D插件可用于在AutoCAD软件内生成随机分布的球体及球体外侧过渡区部件&#xff0c;适用于科研绘图、有限元建模如混凝土细观、颗粒增强复合材料、随机三维骨料及过渡区等方面的应用。 插件可指定的参数有模型的长、宽、高&#xff1b;球…

< JavaScript小技巧:如何优雅的用【一行代码 】实现Js中的常用功能 >

文章目录 &#x1f4ac; 前言&#x1f449; 数组相关① 随机打乱数组顺序② 借助 new Set&#xff08;&#xff09;对数组去重 / 对象数组根据唯一值去重③ 查找数组中 【 最值 】 出现的索引 &#x1f449; Web浏览器相关① 重新加载当前页面&#xff0c;相当于 Ctrl R② 滚动…

解决VScode远程服务器时opencv和matplotlib无法直接显示图像的问题

解决VScode远程服务器时opencv和matplotlib无法直接显示图像的问题 1、本方案默认本地已经安装了VScode与MobaXterm2、在服务器端3、在本地端安装MobaXterm4、测试5、opencv显示测试&#xff08;测试过程中需保持MobaXterm开启的状态&#xff09;6、 matplotlib显示测试&#x…

VSCode Remote-SSH (Windows)

1. VSCode 安装 VSCode 2. 安装扩展 Remote SSH Getting started Follow the step-by-step tutorial or if you have a simple SSH host setup, connect to it as follows: Press F1 and run the Remote-SSH: Open SSH Host… command.Enter your user and host/IP in the …

qemu 虚拟化

一、介绍QEMU Qemu是种非常古老的虚拟化技术&#xff0c;用于虚拟化系统组件并在其上运行多种CPU架构的程序或操作系统。 借助KVM&#xff0c;Qemu可以通过使用基于硬件的虚拟化来获得超快的计算速度。QEMU充当硬件供应商&#xff0c;KVM是CPU。KVM驻留在Linux内核中&#xff0…

Linux下的环境变量

目录 一、环境变量是什么&#xff1f;二、常见的环境变量三、查看环境变量的方法四、和环境变量相关的命令五、命令行参数五、环境变量通常是具有全局属性的 一、环境变量是什么&#xff1f; 环境变量通俗来说就是一种存储系统和应用程序运行需要的配置信息的方式。可以把环境…

Mr. Cappuccino的第57杯咖啡——简单手写Mybatis大致原理

简单手写Mybatis大致原理 大致原理项目结构项目代码代码测试 大致原理 底层基于JDK动态代理技术实现 项目结构 项目代码 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns…

Flutter 自定义view

带进度动画的圆环。没gif&#xff0c;效果大家自行脑补。 继承CustomPainter&#xff0c;paint()方法中拿到canvas&#xff0c;绘制API和android差不多。 import package:flutter/material.dart;class ProgressRingPainter extends CustomPainter {double strokeWidth 20;Col…

整数规划——第三章 全单模矩阵

整数规划——第三章 全单模矩阵 若线性规划问题的约束矩阵为全单模矩阵&#xff0c;则该问题可行域的顶点都是整数点&#xff0c;从而线性规划与整数规划的最优解相同。 3.1 全单模性与最优性 考虑线性整数规划问题&#xff1a; (IP) min ⁡ c T x , s . t . A x ≤ b , x …

MATLAB的设置路径

在主页下的 或者在命令行输入path&#xff0c;命令行会出现所有路径 必须要将某些函数.m文件以及一些类文件包含在路径当中&#xff0c;否则在脚本代码中输入代码时&#xff0c;不会有代码提示

LeetCode96. 不同的二叉搜索树

96. 不同的二叉搜索树 文章目录 [96. 不同的二叉搜索树](https://leetcode.cn/problems/unique-binary-search-trees/)一、题目二、题解 一、题目 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的…

SpringBoot整合达梦数据库

近期接到了一个需要国产化的项目&#xff0c;用到了达梦数据库&#xff0c;没想到一开始配置就出现了问题&#xff0c;下面把配置给大家粘贴出来&#xff0c;大家少踩点坑。 一、先下载达梦数据库 这是达梦数据库下载链接&#xff0c;达梦数据库没有免费的&#xff0c;个人好…