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

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

前言

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

写在最后:

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

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

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

相关文章
|
22天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
14 2
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
2月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
35 4
|
2月前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
1月前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
17 0
|
2月前
|
安全 Java Go
面向对象程序设计语言:Java
Java语言语法和C语言和C++语言很接近,很容易学习和使用,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的特性,Java语言不使用指针,而是引用,并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧
59 2
|
3月前
|
Java 数据处理 开发者
【Java基础面试十二】、说一说你对面向对象的理解
这篇文章阐述了面向对象是一种以类和对象为基础,通过封装、继承和多态等概念来模拟现实世界中的事物及其相互关系的程序设计方法,它强调以事物为中心进行思考和系统构造,与结构化程序设计相比,更符合人类的自然思维方式。
【Java基础面试十二】、说一说你对面向对象的理解
|
3月前
|
Java
【Java基础面试十三】、面向对象的三大特征是什么?
这篇文章介绍了面向对象程序设计的三大基本特征:封装、继承和多态,其中封装隐藏对象实现细节,继承实现软件复用,多态允许子类对象表现出不同的行为特征。
【Java基础面试十三】、面向对象的三大特征是什么?
|
2月前
|
Java 开发者
Java 面向对象
Java 是一种面向对象的编程语言,通过对象与类的概念组织代码和数据。面向对象编程的核心包括类、对象、继承、多态、封装和抽象。类是对象的蓝图,定义了属性和行为;对象则是类的实例。继承允许子类继承父类的属性和方法,增强代码复用性;多态则支持通过相同接口调用不同类型对象的行为,包括方法重载和重写。封装通过公共方法隐藏对象细节,提高安全性;抽象则对对象特征进行提炼,通过抽象类和接口实现。理解这些概念有助于设计高效、可维护的 Java 应用程序。
|
3月前
|
Java 开发者 C++
下一篇
无影云桌面