最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Scala之面向?qū)ο?/h1>
 更新時(shí)間:2023年04月13日 10:37:15   作者:小唐同學(xué)(?>?<?)  
Scala是一門面向?qū)ο蟮恼Z言。在Scala中,一切皆為對象函數(shù)是對象,數(shù)字也是對象,本文詳細(xì)介紹了Scala面向?qū)ο蟮脑砗徒榻B,感興趣的小伙伴可以參考一下

Scala的面向?qū)ο笏枷牒蚃ava是一致的

Scala包:

基礎(chǔ)語法:

package 包名.類名

Scala包的三大作用:

區(qū)分相同名字的類

當(dāng)類很多時(shí),可以很好的管理類

控制訪問范圍

包名的命名規(guī)范:

一般是小寫字母+小圓點(diǎn)

com.公司名.項(xiàng)目名.業(yè)務(wù)模塊名

寫包的好處:

在maven中可以將自己寫的包通過maven導(dǎo)入到項(xiàng)目中

在Scala中獨(dú)有的包的寫法  和文件夾不對應(yīng)  可以獨(dú)立存在

下圖是我在類下邊建的包,和正常的包一樣使用 

包是可以嵌套的

內(nèi)層調(diào)用外層 不需要導(dǎo)包  atguigu包在techer下
外層調(diào)用內(nèi)層 對象 需要導(dǎo)包

 如下代碼:

package chapter04
object Test_01_package {
  def main(args: Array[String]): Unit = {
  }
}
//Scala獨(dú)有的
package techer {
  import chapter04.techer.atguigu.Inner
  object test01t {
    def main(args: Array[String]): Unit = {
      println("hello  我是大哥 pack")
      //外層調(diào)用內(nèi)層 對象 需要導(dǎo)包
          //Inner.main是下邊那個(gè)包中的
      Inner.main(args)
    }
  }
  package atguigu {
    object Inner {
      def main(args: Array[String]): Unit = {
        println("Inner")
        //內(nèi)層調(diào)用外層 不需要導(dǎo)包  atguigu包在techer下
        test01t.main(args)
      }
    }
  }
}
 
 

包對象:

在Scala中包也是面向?qū)ο蟮?,只要在包的?nèi)部(只要在內(nèi)部都可以,內(nèi)層的嵌套也可以),都可以直接調(diào)用包對象的屬性和方法

如果包有嵌套,會出現(xiàn)覆蓋的情況,則會調(diào)用距離最近的包的屬性與方法(包距離最近則會后調(diào)用,會覆蓋先前調(diào)用的)

導(dǎo)包說明:

導(dǎo)包是不支持嵌套的(導(dǎo)包后只能用它下邊的類和對象,不能再用它下邊的包,如果想使用它下邊包中的方法,就需要使用   .   但是當(dāng)我們導(dǎo)包直接導(dǎo)入它下邊的包  就可以直接調(diào)用,不需要用  .     來使用)

Scala 中的三個(gè)默認(rèn)導(dǎo)入分別是
import java.lang._
import scala._
import scala.Predef._

類和對象:

類:可以看成一個(gè)模板
對象:表示具體的事物
我們在使用對象的時(shí)候,會以類為模板創(chuàng)建對象

定義類:

在Java中一個(gè)文件中只能有一個(gè)public    

在Scala中 默認(rèn)的是public 但是它在一個(gè)文件中可以創(chuàng)建多個(gè)伴生類和伴生對象

封裝:

在Scala中屬性只有兩種  可變(var)與不可變(val)(分離了讀寫權(quán)限----類似與面向?qū)ο笾械姆庋b(封裝get  set  方法  是為了分離讀寫權(quán)限))

在Scala直接通過屬性的類型來分離

在Scala中屬性的類型已經(jīng)封裝成    var----private       val----private final         

并且get  set方法也已經(jīng)封裝(封裝成了注解,在使用get  set方法的時(shí)候需要 先引入注解@BeanProperty----不過該注解的作用域只有一個(gè)屬性  意思是  一個(gè)屬性需要設(shè)置一個(gè)注解)

構(gòu)造器:

面向?qū)ο蟮恼Z言基本都有構(gòu)造器(構(gòu)造方法),如果在類中不寫構(gòu)造方法  默認(rèn)構(gòu)造器為空參構(gòu)造方法

在Scala中也有構(gòu)造器,與Java不同,

Scala的構(gòu)造器是在類名上加個(gè)()   是主構(gòu)造器(主構(gòu)造器無參的時(shí)候可以省略()  表示默認(rèn)是可以無參構(gòu)造的  類同Java)

有主構(gòu)造器就一定有從構(gòu)造器

在主構(gòu)造器的內(nèi)部可以定義輔助構(gòu)造器 定義的格式是固定的,在從構(gòu)造器的內(nèi)部第一行代碼必須是直接或者間接的調(diào)用主構(gòu)造器

class Person03(name:String){
  var name1:String=name
def this()
  {
    this("唐不唐")
    println("hello world")
  }
}

主從構(gòu)造器的加載機(jī)制:

在Scala中沒有類加載機(jī)制,所以在代碼直接調(diào)用輔助構(gòu)造器的時(shí)候它是不知道類中的內(nèi)容的, 所以上邊要求(從構(gòu)造器的內(nèi)部第一行代碼必須是直接或者間接的調(diào)用主構(gòu)造器),這就是原因所在,獲取類信息(加載一遍),調(diào)用完后才會返回從構(gòu)造器繼續(xù)執(zhí)行

根據(jù)main方法中你的參數(shù)決定你調(diào)用那個(gè)構(gòu)造器

從構(gòu)造器是有先后順序的,后邊的只能調(diào)用前面的(所調(diào)用的構(gòu)造器必須在本構(gòu)造器之前)

從構(gòu)造器的名稱統(tǒng)一為this(根基參數(shù)的個(gè)數(shù)來區(qū)分)

主構(gòu)造器是可以傳參的 參數(shù)可以當(dāng)作屬性來使用(參數(shù)類型如果省略,默認(rèn)val)

繼承:

繼承關(guān)鍵字:extends

基礎(chǔ)語法:

class 子類名 extends 父類名 { 類體 }

子類繼承父類的屬性和方法

scala 是單繼承

繼承的本質(zhì):其實(shí)與Java是完全不一樣的

在創(chuàng)建子類的對象時(shí),Scala會先創(chuàng)建父類的對象讓后在外層創(chuàng)建子類對象(同Java)

Scala繼承的本質(zhì)就是繼承父類的一個(gè)構(gòu)造器(繼承那個(gè)構(gòu)造器(參數(shù)個(gè)數(shù)來區(qū)別)就會調(diào)用那個(gè))

抽象屬性:

就是不寫等號,寫抽象方法需要把類改成抽象類

抽象屬性在使用的時(shí)候需要繼承它   讓后需要重寫屬性和方法(在Java中是不需要重寫屬性的,因?yàn)镾cala底層是對屬性進(jìn)行封裝,自帶方法)

在重寫抽象類中的非抽象方法的時(shí)候需要在重寫的方法前面加上    override   關(guān)鍵字

子類調(diào)用父類的方法的時(shí)候使用關(guān)鍵字super  

子類對抽象屬性進(jìn)行實(shí)現(xiàn),父類抽象屬性可以用 var 修飾;

子類對非抽象屬性重寫,父類非抽象屬性只支持 val 類型,而不支持 var。
因?yàn)?var 修飾的為可變變量,子類繼承之后就可以直接使用(可以直接進(jìn)行修改),沒有必要重寫    

多態(tài):

父類的引用指向子類的實(shí)例

Java中的多態(tài)測試

:在父子共有的屬性和方法調(diào)用的是父類還是子類:

public class Polymorphic {
    public static void main(String[] args) {
        Person person=new Student();
        System.out.println(person.name);
        person.sayhi();
    }
    public static class Person{
     String   name="Person";
     public void sayhi()
     {
         System.out.println("person  sayhi");
     }
    }
public static class Student extends Person{
        String name="Student";
        public void sayhi()
        {
            System.out.println("student sayhi");
        }
}
 
}

屬性是調(diào)用父類   方法是調(diào)用子類   

在進(jìn)行多態(tài)的時(shí)候是先將整個(gè)內(nèi)存先把父類寫入里面,再把子類嵌套到外邊

引用是使用棧 把地址值是先指向父類的   指向誰就調(diào)用誰的屬性,但是調(diào)用方法是一層一層的調(diào)用,是不斷的被重寫的,所以方法是調(diào)用子類

而Scala與Java不同 都是調(diào)用的子類的

Scala測試如下:

package chapter04
 
object Test07_Polymorphic {
  def main(args: Array[String]): Unit = {
       val  per:Person07=new Student07
       per.sayhi();
    println(per.name)
  }
}
class Person07()
{
  val name:String="dsdsd"
def sayhi():Unit={
  println("hi person")
}
}
class Student07 extends Person07{
  override val name: String = "Student"
override def sayhi(): Unit =
  {
    println("Student say hi")
  }
}

匿名子類:

可以使用匿名子類直接調(diào)用抽象類

也可以直接new這個(gè)抽象子類

匿名子類是自動(dòng)使用多態(tài)的

多態(tài)無法調(diào)用子類獨(dú)有的屬性和方法,外部無法使用匿名子類中特有的(它自己的)方法和屬性

以上就是Java Scala之面向?qū)ο蟮脑敿?xì)內(nèi)容,更多關(guān)于Scala之面向?qū)ο蟮馁Y料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 用java實(shí)現(xiàn)冒泡排序算法

    用java實(shí)現(xiàn)冒泡排序算法

    兩兩比較待排序記錄的關(guān)鍵字,發(fā)現(xiàn)兩個(gè)記錄的次序相反時(shí)即進(jìn)行交換,直到?jīng)]有反序的記錄為止
    2013-01-01
  • Java的jstack命令使用示例詳解

    Java的jstack命令使用示例詳解

    jstack 命令非常的簡單,我們可以通過 jstack -h 或者 jstack -help 命令查看它的用法詳情,今天通過本文重點(diǎn)給大家介紹Java的jstack命令使用,感興趣的朋友一起看看吧
    2022-03-03
  • Spring MVC url提交參數(shù)和獲取參數(shù)

    Spring MVC url提交參數(shù)和獲取參數(shù)

    本文重要講述通過url提交參數(shù)和獲取參數(shù)的具體操作與實(shí)現(xiàn)。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-04-04
  • JAVA實(shí)現(xiàn)線程的三種方法

    JAVA實(shí)現(xiàn)線程的三種方法

    這篇文章介紹了JAVA實(shí)現(xiàn)線程的三種方法,有需要的朋友可以參考一下
    2013-09-09
  • java學(xué)生信息管理系統(tǒng)源代碼

    java學(xué)生信息管理系統(tǒng)源代碼

    這篇文章主要為大家詳細(xì)介紹了java學(xué)生信息管理系統(tǒng)源代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 基于Java數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列的兩種方法小結(jié)

    基于Java數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列的兩種方法小結(jié)

    下面小編就為大家分享一篇基于Java數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列的兩種方法小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Java中Json字符串直接轉(zhuǎn)換為對象的方法(包括多層List集合)

    Java中Json字符串直接轉(zhuǎn)換為對象的方法(包括多層List集合)

    下面小編就為大家?guī)硪黄狫ava中Json字符串直接轉(zhuǎn)換為對象的方法(包括多層List集合)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08
  • 快速解決commons-fileupload組件無法處理自定義head信息的bug

    快速解決commons-fileupload組件無法處理自定義head信息的bug

    問題在于fileupload組件解析完自定義的head節(jié)點(diǎn)后,卻忘記傳遞到FileItemStreamImpl中了,稍作修訂,即可修正該bug
    2013-08-08
  • 搞懂Java線程池

    搞懂Java線程池

    這篇文章主要介紹了Java線程池,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Jackson序列化丟失泛型的解決

    Jackson序列化丟失泛型的解決

    這篇文章主要介紹了Jackson序列化丟失泛型的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論

分宜县| 玉林市| 万宁市| 平邑县| 志丹县| 通山县| 洛南县| 绍兴市| 平潭县| 高安市| 彝良县| 蓬安县| 兴文县| 临沂市| 郁南县| 资中县| 泰和县| 喀喇沁旗| 鱼台县| 定西市| 台东市| 梨树县| 航空| 兴仁县| 嵊泗县| 温宿县| 建宁县| 隆尧县| 来凤县| 曲麻莱县| 安阳市| 剑川县| 湖北省| 二手房| 莆田市| 同心县| 邢台市| 桐柏县| 石门县| 景宁| 珲春市|