1/* 2 * Copyright (c) 2023 - 2024-2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16class A { 17 static static_name: char = c'A'; 18 name: char = c'A'; 19 20 final get_name_a(): char { 21 return this.name; 22 } 23 24 get_name(): char { 25 return this.name; 26 } 27 28 static get_static_name(): char { 29 return A.static_name; 30 } 31} 32 33class B extends A { 34 static static_name: char = c'B'; 35 name: char = c'B'; 36 37 static get_static_name(): char { 38 return B.static_name; 39 } 40 41 override get_name(): char { 42 return this.name; 43 } 44 45 super_name(): char { 46 return super.get_name(); 47 } 48} 49 50final class C extends B { 51 static static_name: char = c'C'; 52 name: char = c'C'; 53 54 static get_static_name(): char { 55 return C.static_name; 56 } 57 58 override get_name(): char { 59 return this.name; 60 } 61 62 override super_name(): char { 63 return super.get_name(); 64 } 65} 66 67function main() : void { 68 { 69 let a = new A(); 70 assertEQ(A.static_name, c'A') 71 assertEQ(A.get_static_name(), c'A') 72 assertEQ(a.name, c'A') 73 assertEQ(a.get_name(), c'A') 74 assertEQ(a.get_name_a(), c'A') 75 } 76 77 { 78 let b = new B(); 79 assertEQ(B.static_name, c'B') 80 assertEQ(B.get_static_name(), c'B') 81 assertEQ(b.name, c'B') 82 assertEQ(b.get_name(), c'B') 83 assertEQ(b.super_name(), c'A') 84 assertEQ(b.get_name_a(), c'A') 85 } 86 87 { 88 let b_as_a: A = new B(); 89 assertEQ(b_as_a.name, c'B') 90 assertEQ(b_as_a.get_name(), c'B') 91 assertEQ(b_as_a.get_name_a(), c'A') 92 } 93 94 { 95 let c = new C(); 96 assertEQ(C.static_name, c'C') 97 assertEQ(C.get_static_name(), c'C') 98 assertEQ(c.name, c'C') 99 assertEQ(c.get_name(), c'C') 100 assertEQ(c.super_name(), c'B') 101 assertEQ(c.get_name_a(), c'A') 102 } 103 104 { 105 let c_as_a: A = new C(); 106 assertEQ(c_as_a.name, c'C') 107 assertEQ(c_as_a.get_name(), c'C') 108 assertEQ(c_as_a.get_name_a(), c'A') 109 } 110 111 { 112 let c_as_b: B = new C(); 113 assertEQ(c_as_b.name, c'C') 114 assertEQ(c_as_b.get_name(), c'C') 115 assertEQ(c_as_b.super_name(), c'B') 116 assertEQ(c_as_b.get_name_a(), c'A') 117 } 118 119 { 120 let c = new C(); 121 assertEQ((c as A).name, c'A') 122 assertEQ((c as A).get_name(), c'C') 123 assertEQ((c as A).get_name_a(), c'A') 124 } 125 126 { 127 assertEQ((new C() as B).name, c'B') 128 assertTrue((new C() as B).get_name() ==c'C') 129 assertEQ((new C() as B).super_name(), c'B') 130 assertEQ((new C() as B).get_name_a(), c'A') 131 } 132} 133