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

news2024/12/23 4:53:30

目录

前言

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)方法重写和重载的区别分析:

写在最后:

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

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

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

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

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

相关文章

MySQL: Failed to Connect to MySQL at XXXX:3306 with user root

客户端连接MySQL服务器&#xff0c;报错&#xff1a; 解决方案&#xff1a; 没有让root用户远程登录&#xff0c;需要设置&#xff1b; 进入MySQL服务器&#xff0c;修改一下 # mysql -h localhost -uroot -P3306 -p12345678 mysql: [Warning] Using a password on the comm…

elk开启组件监控

elk开启组件监控 效果&#xff1a; logstash配置 /etc/logstash/logstash.yml rootnode1:~# grep -Ev "^#|^$" /etc/logstash/logstash.yml path.data: /var/lib/logstash path.logs: /var/log/logstash xpack.monitoring.enabled: true xpack.monitoring.elasti…

融云荣登36氪WISE2023「全球化最佳基础设施」榜单

8 月 17 日&#xff08;周四&#xff09;&#xff0c;融云将带来直播课-《北极星如何协助开发者排查问题与预警风险&#xff1f;》欢迎点击报名~ 7 月 25 日&#xff0c;由 36 氪主办的“WISE 2023 全球化价值大会”在上海举行。大会汇聚产业力量&#xff0c;广邀不同领域的从业…

技术 SEO: 初学者指南2023

在当今数字时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;对于网站的成功至关重要。无论你是个人博客、小型企业还是大型电子商务网站&#xff0c;通过优化你的技术方面&#xff0c;可以提升你的网站在搜索引擎结果页面上的排名&#xff0c;吸引更多的有针对性的访问…

优化团队沟通:应对成员间不和谐的策略

一、理解团队沟通的重要性 深入了解团队沟通的含义 团队沟通并不仅仅是团队成员之间的信息交换。它是一个更为复杂的过程&#xff0c;涉及到信息的解码、理解、反馈&#xff0c;以及相互之间的情绪表达和理解。一个高效的团队沟通环境是能够促进所有成员之间清晰、有效、及时…

使用 API Gateway Integrator 在 Quarkus 中实施适用于 AWS Lambda 的 OpenAPI

AWS API Gateway 集成使得使用符合 OpenAPI 标准的 Lambda Function 轻松实现 REST API。 关于开放API 它是一个 允许以标准方式描述 REST API 的规范。 OpenAPI规范 (OAS) 为 REST API 定义了与编程语言无关的标准接口描述。这使得人类和计算机都可以发现和理解服务的功能&am…

Javascript 从入门到精通之JavaScript属性

一、什么是属性? 属性是一个JavaScript对象关联的值。一个JavaScript对象是一个无序的性质集合&#xff0c;属性通常可以更改、添加和删除&#xff0c;但有些只读。 二、访问JavaScript属性 访问对象属性的语法是(3种表现形式): 第一种 objectName.property // person.ag…

哪种模式ip更适合你的爬虫项目?

作为一名爬虫程序员&#xff0c;对于数据的采集和抓取有着浓厚的兴趣。当谈到爬虫ip时&#xff0c;你可能会听说过两种常见的爬虫ip类型&#xff1a;Socks5爬虫ip和HTTP爬虫ip。但到底哪一种在你的爬虫项目中更适合呢&#xff1f;本文将帮助你进行比较和选择。 首先&#xff0c…

CompletableFuture基本概念及用法

CompletableFuture继承于java.util.concurrent.Future&#xff0c;它本身具备Future的所有特性&#xff0c;并且基于JDK1.8的流式编程以及Lambda表达式等实现一元操作符、异步回调以及事件驱动编程的异步类&#xff0c;可以用来实现多线程的串行关系&#xff0c;并行关系&#…

I.MX6ULL_Linux_驱动篇(45)linux INPUT子系统

按键、鼠标、键盘、触摸屏等都属于输入(input)设备&#xff0c; Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设备&#xff0c;只是在此基础上套上了 input 框 架&#xff0c;用户只需要负责上报输入事件&#xff0c;比如按键值、…

Zotero+坚果云解决存储空间不足

Zotero实现同步有三种思路&#xff1a;①zotero自带同步&#xff08;文件同步方式选择Zotero&#xff09;&#xff1b;②zotfile坚果云网盘同步&#xff1b;③zotero选项勾选文件同步坚果云WebDAV同步。由于第一种只有300M使用空间&#xff0c;使用一段时间就会提示存储空间不足…

动态规划(用空间换时间的算法)原理逻辑代码超详细!参考自《算法导论》

动态规划&#xff08;用空间换时间的算法&#xff09;-实例说明和用法详解 动态规划&#xff08;DP&#xff09;思想实例说明钢条切割问题矩阵链乘法问题 应用满足的条件和场景 本篇博客以《算法导论》第15章动态规划算法为本背景&#xff0c;大量引用书中内容和实例&#xff0…

【枚举,构造】CF1582 C D

Problem - C - Codeforces 题意&#xff1a; 思路&#xff1a; 思路很简单&#xff0c;只删除一种&#xff0c;直接枚举删除的是哪一种即可 但是回文子序列的判定我vp的时候写的很答辩&#xff0c;也不知道为什么当时要从中间往两边扫&#xff0c;纯纯自找麻烦 然后就越改越…

题解:散列查找(拉链法)出现冲突时,在散列表冲突点向外延伸一条链表(单链表),怎么使用memset函数

一、链接 840. 模拟散列表 二、题目 维护一个集合&#xff0c;支持如下几种操作&#xff1a; I x&#xff0c;插入一个数 xx&#xff1b;Q x&#xff0c;询问数 xx 是否在集合中出现过&#xff1b; 现在要进行 NN 次操作&#xff0c;对于每个询问操作输出对应的结果。 输…

SAP 开发编辑界面-关闭助手

打开关闭助手时的开发界面如下&#xff1a; 关闭关闭助手后的界面如下&#xff1a; 菜单栏&#xff1a; 编辑--》修改操作--》关闭助手

VLC视频直播低时延配置

默认的VLC的播放时延是比较高的&#xff0c;一般是秒级别&#xff0c;默认配置的话&#xff0c;都是5秒左右&#xff0c;这种默认配置是为了利用缓存机制&#xff0c;使播放体验更加流畅&#xff0c;对于需要更低时延的播放测试的话&#xff0c;并不适合&#xff0c;需要调整一…

商城-学习整理-基础-商品服务API-属性分组(七)

目录 一、创建系统菜单二、开发属性分组1、将三级分类功能抽取出来2、编写后端代码3、属性分组新增功能4、属性分组修改回显功能 三、品牌管理1、分页显示有点问题&#xff0c;使用MyBatis-Plus有点问题&#xff0c;需要使用分页插件&#xff0c;给容器中放一个2、修改模糊查询…

Netty: 向ChannelPipeline中添加ChannelHandler的顺序

Netty中的ChannelHandler有inbound handler&#xff0c;处理接收数据的过程&#xff1b;有outbound handler&#xff0c;处理发数据的过程。当然&#xff0c;也有的handler既处理接收的数据 &#xff0c;也处理发送的数据。 每个channel对应一个ChannelPipeline。handler被添加…

多语言多用户跨境电商系统搭建--独立站源码制作

开发一个多语言多用户跨境电商系统搭建需要考虑以下几个方面&#xff1a; 1. 系统架构设计&#xff1a;选择一个适合多语言多用户跨境电商系统的开源框架或者自行设计系统架构。确保系统的稳定性和扩展性。 2. 多语言支持&#xff1a;设计一个多语言支持功能&#xff0c;使用…

电子邮件数据加密的工作原理

电子邮件数据加密是通过使用密码学算法对电子邮件的内容进行转换&#xff0c;使得只有授权的接收方能够解读邮件内容。下面是电子邮件数据加密的一般工作原理&#xff1a; 密钥生成&#xff1a;发送方和接收方分别生成自己的密钥对。密钥对通常包括公钥和私钥。公钥用于加密和验…