Scala 基础 (五):面向对象(上篇),网易严选电商运营面试

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文




*   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规范的`getter`和`setter`方法的话可以加`@BeanProperty`相当于自动创建,不需要显式写出。

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



**访问权限**



*   Java 中,访问权限分为:`public`,`private`,`protected` 和`默认`

*   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中的封装:将属性私有化,提供`getter`和`setter`,用于赋值和获取值。

*   Scala中的公有属性,底层实际为`private`,并通过get方法`obj.field()`和set方法o`bj.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 = _

}




[]( )继承

---------------------------------------------------------------



如何定义?



class 子类名 extends 父类名 { 类体 }




*   子类继承父类的属性和方法。

*   Scala和Java一样都是单继承的。

*   继承的调用顺序,父类为先,子类在后。



举个栗子:



class Person(){

var name: String = _

var age: Int = _

println(“1.父类的主构造器调用”)

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

this()

println("2.父类的辅助构造器被调用")

this.name = name

this.age = age

}

def printInfo(): Unit ={

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

}

}

// 默认调用Person的无参主构造器

class Student(name: String,age: Int) extends Person(name ,age ){

var stuNo: String = _

println(“3.子类的主构造器调用”)

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

this(name,age)

this.stuNo = stuNo

最后

笔者已经把面试题和答案整理成了面试专题文档

image

image

image

image

image

image

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
1713425890893)]

[外链图片转存中…(img-T1x6bya7-1713425890894)]

[外链图片转存中…(img-f9wFK17T-1713425890894)]

[外链图片转存中…(img-8IgGSIAg-1713425890894)]

[外链图片转存中…(img-XJB7OGgE-1713425890895)]

[外链图片转存中…(img-bCa1RoRW-1713425890895)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-50MWUMb3-1713425890896)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 26
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值