前言
我的 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)方法重写和重载的区别分析:
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果感到有所收获的话可以给博主点一个赞哦。
如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~