Java と Scala がオブジェクト指向プログラミングを実装する方法
Scala パッケージ:
基本構文:
パッケージ パッケージ名.クラス名
Scala パッケージの 3 つの主要な機能:
これらを区別する同じ名前の Class
クラスが多い場合でもクラスをうまく管理できる
アクセス範囲を制御
パッケージ名の命名規則:
は通常小文字です。ドット
com.会社名.プロジェクト名.ビジネスモジュール名
パッケージを作成する利点:
作成したパッケージをインポートできます。 Maven を介してプロジェクトに追加します
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"); } } }
属性是调用父类 方法是调用子类
在进行多态的时候是先将整个内存先把父类写入里面,再把子类嵌套到外边
引用是使用栈 把地址值是先指向父类的 指向谁就调用谁的属性,但是调用方法是一层一层的调用,是不断的被重写的,所以方法是调用子类
而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") } }
匿名子类:
可以使用匿名子类直接调用抽象类
也可以直接new这个抽象子类
匿名子类是自动使用多态的
多态无法调用子类独有的属性和方法,外部无法使用匿名子类中特有的(它自己的)方法和属性
以上がJava と Scala がオブジェクト指向プログラミングを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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