// 基类
class BaseClass {
// 公有属性,可以在类内部、子类以及类的实例外部访问
public publicProperty: string;
// 私有属性,只能在类内部访问
private privateProperty: number;
// 受保护属性,可以在类内部和子类中访问
protected protectedProperty: boolean;
constructor(publicProp: string, privateProp: number, protectedProp: boolean) {
this.publicProperty = publicProp;
this.privateProperty = privateProp;
this.protectedProperty = protectedProp;
}
// 公有方法,可以在类内部、子类以及类的实例外部访问
public publicMethod(): void {
console.log('This is a public method. Public property:', this.publicProperty);
}
// 私有方法,只能在类内部访问
private privateMethod(): void {
console.log('This is a private method. Private property:', this.privateProperty);
}
// 受保护方法,可以在类内部和子类中访问
protected protectedMethod(): void {
console.log('This is a protected method. Protected property:', this.protectedProperty);
}
}
// 子类继承基类
class SubClass extends BaseClass {
constructor(publicProp: string, privateProp: number, protectedProp: boolean) {
super(publicProp, privateProp, protectedProp);
}
// 子类可以访问公有属性和方法
public subPublicMethod(): void {
this.publicMethod();
console.log('Subclass accessing public property:', this.publicProperty);
}
// 子类不能访问私有属性和方法
// 以下代码会报错:Property 'privateProperty' is private and only accessible within class 'BaseClass'.
// public subPrivateMethod(): void {
// this.privateMethod();
// console.log('Subclass accessing private property:', this.privateProperty);
// }
// 子类可以访问受保护属性和方法
public subProtectedMethod(): void {
this.protectedMethod();
console.log('Subclass accessing protected property:', this.protectedProperty);
}
}
// 创建子类实例
const subInstance = new SubClass('public value', 42, true);
subInstance.subPublicMethod();
// subInstance.subPrivateMethod(); // 报错,无法访问
subInstance.subProtectedMethod();
解释
- 公有(public):在基类和子类中,以及类的实例外部都可以访问。这是因为
public
修饰符允许属性和方法在任何地方被访问,没有访问限制。
- 私有(private):只能在声明它的类内部访问。子类无法访问基类的私有属性和方法,因为
private
修饰符确保了数据的封装,只有类本身可以操作这些成员。
- 受保护(protected):可以在声明它的类内部以及子类中访问,但不能在类的实例外部访问。这为继承体系提供了一定程度的数据保护,允许子类对基类的一些成员进行访问和操作,同时防止外部直接访问。