【アリクラウド】Java対象開発カリキュラムノート(十五)
1 finalキーワード
Javaではfinalはターミナルと呼ばれ、finalを使用してクラス、メソッド、プロパティを定義できます.1.finalで定義されたクラスを使用します.サブクラスは使用できません.2.final定義を使用する方法では、布団類の上書きは許可されません.3.finalで定義した変数は定数となり、定数は定義時に値を付けなければならず、値は変更できません.開発ではpublic static finalを使用してグローバル定数を定義します.また、定数の識別子はすべて大文字で命名する必要があります.eg:public static final int LEVEL_A=100;
2多態性
1.1概念
Javaのマルチステートのコア:
例:単純なプログラムを振り返る
コード#コード#
class A {
public void print(){
System.out.println("[A] public void print(){}");
}
}
class B extends A{
public void print(){
System.out.println("[B] public void print(){}");
}
}
public class TestDemo {
public static void main(String[] args) {
B b = new B(); //
b.print(); //
}
}
出力結果
[B] public void print(){}
例:アップグレードの実現
コード#コード#
class A {
public void print(){
System.out.println("[A] public void print(){}");
}
}
class B extends A{
public void print(){
System.out.println("[B] public void print(){}");
}
}
public class TestDemo {
public static void main(String[] args) {
A a = new B(); //
a.print();
}
}
出力結果
[B] public void print(){}
アップグレードが発生したかどうかにかかわらず、その本質的な核心は、どのサブクラス(newがどこにあるか)、呼び出された方法がクラスに上書きされているかどうかにある.ダウンシフトとは、親オブジェクトを子オブジェクトに変更することです.なぜですか.サブクラス拡張操作を使用する必要がある場合に使用します.例:ダウンシフトの実現
コード#コード#
class A {
public void print(){
System.out.println("[A] public void print(){}");
}
}
class B extends A{
public void print(){
System.out.println("[B] public void print(){}");
}
public void funB(){
System.out.println("[B] public void funB(){}");
}
}
public class TestDemo {
public static void main(String[] args) {
A a = new B(); //
a.print();
//
// B funB() ,
B b = (B) a; //
b.funB();
}
}
出力結果
[B] public void print(){}
[B] public void funB(){}
すべての親が下に転換できるわけではありません.下に転換する前に必ず上へ転換しなければなりません.そうしないと、転換時にClassCastExceptionが現れます.先進的な行判は、転換を行い、instanceofキーワードに頼って実現されています.
例:instanceofキーワードの使用
コード#コード#
class A {
public void print(){
System.out.println("[A] public void print(){}");
}
}
class B extends A{
public void print(){
System.out.println("[B] public void print(){}");
}
public void funB(){
System.out.println("[B] public void funB(){}");
}
}
class C extends A {}
public class TestDemo {
public static void main(String[] args) {
A a = new B(); //
System.out.println(a instanceof A);
System.out.println(a instanceof B);
if (a instanceof B){ // ClassCastException
B b = (B) a ;
b.funB();
}
}
}
出力結果
true
true
[B] public void funB(){}
この転換は何の意味がありますか?例:Personクラスのすべてのサブクラスインスタンスを受信し、Personクラスのメソッドを呼び出すメソッドを定義する必要があります.
コード#コード#
class Person {
public void takeoff(){
System.out.println("take off");
}
}
class Student extends Person {
public void takeoff(){
System.out.println("piece");
}
}
class Woker extends Person {
public void takeoff(){
System.out.println("all");
}
}
public class TestDemo {
public static void main(String[] args) {
in(new Student());
in(new Woker());
}
public static void in(Person per){
per.takeoff();
}
}
出力結果
piece
all
オブジェクトのアップグレードの最も核心的な用途:操作パラメータの統一.
1.2まとめ