検索
ホームページJava&#&チュートリアル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 までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、