1/* 2 * Copyright (c) 2023 - 2024 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.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.name; 64 } 65} 66 67function main() : void { 68 { 69 let a = new A(); 70 assert A.static_name == c'A'; 71 assert A.get_static_name() == c'A'; 72 assert a.name == c'A'; 73 assert a.get_name() == c'A'; 74 assert a.get_name_a() == c'A'; 75 } 76 77 { 78 let b = new B(); 79 assert B.static_name == c'B'; 80 assert B.get_static_name() == c'B'; 81 assert b.name == c'B'; 82 assert b.get_name() == c'B'; 83 assert b.super_name() == c'A'; 84 assert b.get_name_a() == c'A'; 85 } 86 87 { 88 let b_as_a: A = new B(); 89 assert b_as_a.name == c'B'; 90 assert b_as_a.get_name() == c'B'; 91 assert b_as_a.get_name_a() == c'A'; 92 } 93 94 { 95 let c = new C(); 96 assert C.static_name == c'C'; 97 assert C.get_static_name() == c'C'; 98 assert c.name == c'C'; 99 assert c.get_name() == c'C'; 100 assert c.super_name() == c'B'; 101 assert c.get_name_a() == c'A'; 102 } 103 104 { 105 let c_as_a: A = new C(); 106 assert c_as_a.name == c'C'; 107 assert c_as_a.get_name() == c'C'; 108 assert c_as_a.get_name_a() == c'A'; 109 } 110 111 { 112 let c_as_b: B = new C(); 113 assert c_as_b.name == c'C'; 114 assert c_as_b.get_name() == c'C'; 115 assert c_as_b.super_name() == c'B'; 116 assert c_as_b.get_name_a() == c'A'; 117 } 118 119 { 120 let c = new C(); 121 assert (c as A).static_name == c'A'; 122 assert (c as A).get_static_name() == c'A'; 123 assert (c as A).name == c'A'; 124 assert (c as A).get_name() == c'C'; 125 assert (c as A).get_name_a() == c'A'; 126 } 127 128 { 129 assert (new C() as B).static_name == c'B'; 130 assert (new C() as B).get_static_name() == c'B'; 131 assert (new C() as B).name == c'B'; 132 assert (new C() as B).get_name() ==c'C'; 133 assert (new C() as B).super_name() == c'B'; 134 assert (new C() as B).get_name_a() == c'A'; 135 } 136} 137