2024年Scala 基础 (五):面向对象(上篇),想搞定大厂面试官

最后

我想问下大家当初选择做程序员的初衷是什么?有思考过这个问题吗?高薪?热爱?

既然入了这行就应该知道,这个行业是靠本事吃饭的,你想要拿高薪没有问题,请好好磨练自己的技术,不要抱怨。有的人通过培训可以让自己成长,有些人可以通过自律强大的自学能力成长,如果你两者都不占,还怎么拿高薪?

架构师是很多程序员的职业目标,一个好的架构师是不愁所谓的35岁高龄门槛的,到了那个时候,照样大把的企业挖他。为什么很多人想进阿里巴巴,无非不是福利待遇好以及优质的人脉资源,这对个人职业发展是有非常大帮助的。

如果你也想成为一名好的架构师,那或许这份Java核心架构笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

中高级开发必知必会:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

举个栗子:


package com{

  // 外层包定义单例对象

  object Outer{

    var out: String="out"

    def main(args: Array[String]): Unit = {

      println(Inner.in)

    }

  }



  package zhao{

    package scala{

      // 内层包中的对象

      object Inner{

        val in: String="Inner"



        def main(args: Array[String]): Unit = {

          println(Outer.out)

          Outer.out="ourter"

          println(Outer.out)

        }

      }

    }

  }

}



嵌套风格的好处:

  • 一个源文件中可以声明多个 package

  • 子包中的类可以直接访问父包中的内容,而无需导包

包对象

定义包对象:


package object 包名{

	// 代码块

}



  • Scala 中可以为每个包定义一个同名的包对象,定义在包对象中的成员,作为其对应包下所有 class 和 object 的共享变量,可以被直接访问。

  • 定义当前包共享的属性和方法。

  • 必须为同一个包下面的单例对象或者类才能访问到

导入包

  • import java.util._ 导入包 util中的所有成员

  • import java.util.{ArrayList=>JL} 引入util下的ArrayList类起别名为JL

  • import java.util.{HashSet, ArrayList} 导入util中的多个类

  • import java.util.{ArrayList =>_,_} 屏蔽类

  • new _root_.java.util.HashMap 导入包的绝对路径

Scala中导入了三个默认的包:

  • import java.lang._

  • import scala._

  • import scala.Predef._

二、类和对象

===================================================================

定义:


[修饰符] class 类名 {

	// 定义属性

  [修饰符] var/val name: 类型名= _

  	// 定义方法

   [修饰符] 方法名(args: ArgsType): RetType = {

        

    }

} 



  • 在Java里面,声明类需要使用public进行修饰,类名和文件名必须保持一致。一个.java文件 有一个 public 类。

  • Scala中没有 public关键字,默认就是公共的,一个.scala 中可以写多个类。声明类时不能加public,会报错。类名不要求和文件名一致。

  • 成员需要Java Bean规范的gettersetter方法的话可以加@BeanProperty相当于自动创建,不需要显式写出。

  • 给成员属性赋初始值使用_,值类型的值0,引用则是null。定义常量的话不能用_

访问权限

  • Java 中,访问权限分为:publicprivateprotected默认

  • Scala 中属性和方法的默认访问权限为 public,但 Scala 中无 public 关键字,不用显式声明。

  • private 为私有权限,只在类的内部和伴生对象中可用。

  • protected 为受保护权限,同类、子类可以访问,同包无法访问。

  • private[包名] 增加包访问权限,包名下的其他类也可以使用

创建对象


val 或者 var 对象名 [: 类型] = new 类型()



  • val 修饰对象,不能改变对象的引用(内存地址),可以改变对象属性的值。

  • var 修饰对象,可以修改对象的引用和修改对象的属性值

构造器

Scala 构造对象也需要调用构造方法,构造器包括主构造器辅助构造器


class 类名(形参列表) { // 主构造器

	 // 类体

	 def this(形参列表) { // 辅助构造器

	 

	 }

	 def this(形参列表) { //辅助构造器可以有多个...

	 

	 }

}



举个栗子:


object Test05_Constructor {

  def main(args: Array[String]): Unit = {

    val student = new Student1()

    student.Student1()



    val student1 = new Student1("王五")

    val student3 = new Student1("李四",21)



  }

}



// 无参的主构造器

class Student1(){

  var name: String= _

  var age: Int = _

  println("1.主构造方法被调用 ")



  // 声明辅助构造方法  必须直接或间接的调用主构造器

  def this(name: String){

    // 调用主构造器

    this()

    println("2.辅助构造方法 一 ")

    this.name = name

    println(s"name: $name age: $age")

  }

  def this(name: String,age: Int){

    // 间接调用主构造器

    this(name)

    println("3.辅助构造方法 二 ")

    this.age = age

    println(s"name: $name age: $age")

  }



  def Student1(): Unit = {

    println("一般方法被调用,不是构造方法!!")

  }

}





特点说明:

  • 主构造器在类定义上,创建对象最先调用的构造器。

  • 辅助构造器用this定义,可以有多个。

  • 辅助构造方法不能直接构建对象,必须直接或者间接调用主构造方法

  • 构造器调用其他另外的构造器,要求被调用构造器必须提前声明。

  • 定义和类同名的方法,就是一个普通方法。

主构造器参数说明

  • 主构造器函数的形参包括三种类型:未用任何修饰var 修饰、val 修饰

  • 不加参数列表相当于为空,()可以省略。

  • 未用任何修饰符修饰,这个参数就是一个局部变量

  • var 修饰参数,作为类的成员属性使用,可以修改,val 修饰参数,作为类只读属性使用,不能修改

举个栗子:


class Student2(var name: String,var age: Int)



//主构造器 无修饰

class Student3( name: String, age: Int){

  def printInfo(): Unit ={

    println(s"student3: name = $name, age = ${age}")

  }

}



class Student4(val name: String,val age: Int)



class Student5(var name: String,var age: Int){

  var school: String = _

  def this( name: String, age: Int,school: String){

    this(name,age)

    this.school = school

  }

  

  def printInfo(): Unit ={

    println(s"student5: name = $name, age = $age,school = $school")

  }

}



三、面向对象三大特性

=======================================================================

封装


  • Java中的封装:将属性私有化,提供gettersetter,用于赋值和获取值。

  • Scala中的公有属性,底层实际为private,并通过get方法obj.field()和set方法obj.field_=(value)对其进行操作。所以scala不推荐设置为private。如果需要和其他框架互操作,必须提供Java Bean规范的getter和setter的话可以加@scala.beans.BeanProperty注解。


class Student {

  // 定义属性

  private val name: String = "lisi"

  // 把对应的符合JavaBean规范的getter和setter创建出来

  @BeanProperty 

  var age: Int = _

  var sex: String = _

}





# **Java高频面试专题合集解析:**

![阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等](https://img-blog.csdnimg.cn/img_convert/d6917a570de9a0441165baa028e970dc.webp?x-oss-process=image/format,png)

当然在这还有更多整理总结的Java进阶学习笔记和面试题未展示,其中囊括了**Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构资料和完整的Java架构学习进阶导图!**

![阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等](https://img-blog.csdnimg.cn/img_convert/31dcfa57fe9e65314b80b14cbc3a477d.webp?x-oss-process=image/format,png)

**更多Java架构进阶资料展示**

![阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等](https://img-blog.csdnimg.cn/img_convert/e22b82705d891dab4b16a0fcf52ffe1b.webp?x-oss-process=image/format,png)

![阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等](https://img-blog.csdnimg.cn/img_convert/c1d878e58bc55bf4704bd985df076e64.webp?x-oss-process=image/format,png)

![阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等](https://img-blog.csdnimg.cn/img_convert/35bbb9df23ae0f2fe430254c71ae4c6c.webp?x-oss-process=image/format,png)

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构资料和完整的Java架构学习进阶导图!**

[外链图片转存中...(img-TtXIDRtC-1715005714972)]

**更多Java架构进阶资料展示**

[外链图片转存中...(img-FPIBJ0vU-1715005714973)]

[外链图片转存中...(img-CSqRzPhP-1715005714975)]

[外链图片转存中...(img-pPXrxD7n-1715005714975)]

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值