目次
Scala パッケージ:
基本構文:
Scala パッケージの 3 つの主要な機能:
パッケージ名の命名規則:
パッケージを作成する利点:
Package オブジェクト:
ガイド パッケージの説明:
クラスの定義:
カプセル化: ## 複数のコンパニオン クラスとコンパニオン オブジェクトを作成できます
コンストラクタから 名前はこれに統一されます(基本パラメータの数で区別されます)
#scala は単一継承です
多态:
Java中的多态测试
Scala测试如下:
ホームページ Java &#&チュートリアル Java と Scala がオブジェクト指向プログラミングを実装する方法

Java と Scala がオブジェクト指向プログラミングを実装する方法

May 07, 2023 pm 01:46 PM
java scala

Scala パッケージ:

基本構文:

パッケージ パッケージ名.クラス名

Scala パッケージの 3 つの主要な機能:

これらを区別する同じ名前の Class

クラスが多い場合でもクラスをうまく管理できる

アクセス範囲を制御

パッケージ名の命名規則:

は通常小文字です。ドット

com.会社名.プロジェクト名.ビジネスモジュール名

パッケージを作成する利点:

作成したパッケージをインポートできます。 Maven を介してプロジェクトに追加します

Scala でパッケージを記述する独自の方法は、フォルダーに対応せず、独立して存在することができます

下の図は、クラスの下に構築したパッケージです。通常のパッケージと同様に使用します

Java と Scala がオブジェクト指向プログラミングを実装する方法

パッケージは入れ子にすることができます

内层调用外层 不需要导包  atguigu包在techer下
ログイン後にコピー
外层调用内层 对象 需要导包
ログイン後にコピー

次のコード:

package chapter04
object Test_01_package {
  def main(args: Array[String]): Unit = {
  }
}
//Scala独有的
package techer {
  import chapter04.techer.atguigu.Inner
  object test01t {
    def main(args: Array[String]): Unit = {
      println("hello  我是大哥 pack")
      //外层调用内层 对象 需要导包
          //Inner.main是下边那个包中的
      Inner.main(args)
    }
  }
  package atguigu {
    object Inner {
      def main(args: Array[String]): Unit = {
        println("Inner")
        //内层调用外层 不需要导包  atguigu包在techer下
        test01t.main(args)
      }
    }
  }
}
ログイン後にコピー

Package オブジェクト:

Scala では、パッケージもオブジェクト指向であり、パッケージ内にある限り (内部にある限り、内部ネストも可能)、パッケージ オブジェクトのプロパティとメソッドを直接呼び出すことができます

パッケージがネストされている場合、オーバーライドが発生し、最も近いパッケージのプロパティとメソッドが呼び出されます (最も近いパッケージが後で呼び出され、以前に呼び出されたパッケージが上書きされます)

ガイド パッケージの説明:

ガイド パッケージは埋め込みをサポートしていません (パッケージをインポートすると、その下のクラスとオブジェクトのみが使用でき、その下のパッケージは使用できなくなります。その下のパッケージの場合は、 を使用する必要があります。ただし、パッケージをインポートして、その下のパッケージを直接インポートすると、 を使用せずに直接呼び出すことができます。 .Predef.__


クラスとオブジェクト:
クラス: テンプレートとみなすことができます
オブジェクト: 特定のものを表します
オブジェクトを使用するときは、クラスをテンプレートとして使用してオブジェクトを作成します

クラスの定義:

Java ではファイル内にパブリックは 1 つだけ存在できます

Scala ではデフォルトはパブリックですが、ファイル内にあります

カプセル化: ## 複数のコンパニオン クラスとコンパニオン オブジェクトを作成できます

#Scala には、変数 (var) と不変 (val) の 2 種類のプロパティしかありません (読み取り権限と書き込み権限が分離されています -- -- オブジェクト指向のカプセル化と同様です (get set メソッドは別の読み取りにカプセル化されます)および書き込み権限))

Scala では、プロパティの型はプロパティの型によって直接分離されます。

Scala では、プロパティの型は var--- にカプセル化されています。 -private val----private Final

そして、get set メソッドもカプセル化されています (アノテーションにカプセル化されています。get set メソッドを使用する場合は、アノテーション @BeanProperty を導入する必要があります--- -ただし、このアノテーションのスコープには属性が 1 つしかありません。つまり、アノテーションで 1 つの属性を設定する必要があります)

コンストラクター:

オブジェクト指向言語には基本的にコンストラクター (構築メソッド) があります。クラスにコンストラクターが存在しない場合. デフォルトのコンストラクターは空のパラメーターのコンストラクターです.

Scala にもコンストラクターがあります. Java とは異なり、

Scala のコンストラクターは () を追加します。クラス名。メイン コンストラクターです (メイン コンストラクターにパラメーターがない場合は () を省略できます。つまり、Java と同様に、デフォルトでパラメーターなしで構築できます)
メイン コンストラクターがある場合コンストラクター、スレーブ コンストラクターが必要です

# メイン コンストラクター内で定義できる補助コンストラクター定義の形式は固定されています。スレーブ コンストラクター内のコードの最初の行は、メイン コンストラクターを直接または間接的に呼び出す必要があります

class Person03(name:String){
  var name1:String=name
def this()
  {
    this("唐不唐")
    println("hello world")
  }
}
ログイン後にコピー

マスター/スレーブ コンストラクターのロード メカニズム:

Scala にはクラス ロード メカニズムがないため、コードが補助コンストラクターを直接呼び出すとき、クラスの内容がわからないため、上記の要件 (コンストラクター内のコードの最初の行から。メイン コンストラクターは直接または間接的に呼び出す必要があります)。これが理由です。クラス情報を取得し (一度ロードし)、呼び出し後にコンストラクターに戻って実行を継続します。が完了しました

メイン メソッドのパラメーターに従って決定されます どのコンストラクターを呼び出しますか?

コンストラクターからはシーケンスがあり、後のコンストラクターは前のコンストラクターのみを呼び出すことができます (コンストラクターが呼び出される)このコンストラクタの前にある必要があります)

コンストラクタから 名前はこれに統一されます(基本パラメータの数で区別されます)

メインコンストラクタはプロパティとして渡せるパラメータです(パラメータの型を省略した場合、デフォルトは val です)

継承 :

継承キーワード : extends

基本構文 :

class サブクラスname は親クラス名 {クラス本体} を拡張します

サブクラスは親クラスの属性とメソッドを継承します

#scala は単一継承です

継承の本質は次のとおりです。実際、Java とはまったく異なります。サブクラスのオブジェクトを作成するとき、Scala は最初に親クラスのオブジェクトを作成し、次に外側の層にサブクラス オブジェクトを作成します (Java と同じ)

Scala 継承の本質は、親クラスのコンストラクターを継承することです (そのコンストラクター (パラメーターの数が異なる) が呼び出されます)

抽象属性:

は、等号 抽象メソッドを記述するには、クラスを抽象クラスに変更する必要があります

抽象属性を使用する場合は、それを継承してプロパティとメソッドを書き換える必要があります(プロパティを書き換える必要はありません) Java。Scala の最下層はプロパティをカプセル化し、独自のメソッドを持っているため)

在重写抽象类中的非抽象方法的时候需要在重写的方法前面加上 override 关键字

子类调用父类的方法的时候使用关键字super

子类对抽象属性进行实现,父类抽象属性可以用 var 修饰;

子类对非抽象属性重写,父类非抽象属性只支持 val 类型,而不支持 var。
因为 var 修饰的为可变变量,子类继承之后就可以直接使用(可以直接进行修改),没有必要重写

多态:

父类的引用指向子类的实例

Java中的多态测试

:在父子共有的属性和方法调用的是父类还是子类:

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");
        }
}
 
}
ログイン後にコピー

属性是调用父类 方法是调用子类

在进行多态的时候是先将整个内存先把父类写入里面,再把子类嵌套到外边

引用是使用栈 把地址值是先指向父类的 指向谁就调用谁的属性,但是调用方法是一层一层的调用,是不断的被重写的,所以方法是调用子类

Java と Scala がオブジェクト指向プログラミングを実装する方法

而Scala与Java不同 都是调用的子类的

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")
  }
}
ログイン後にコピー

Java と Scala がオブジェクト指向プログラミングを実装する方法

匿名子类:

可以使用匿名子类直接调用抽象类

也可以直接new这个抽象子类

匿名子类是自动使用多态的

多态无法调用子类独有的属性和方法,外部无法使用匿名子类中特有的(它自己的)方法和属性

以上がJava と Scala がオブジェクト指向プログラミングを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

See all articles