重写description方法

本文介绍在Objective-C中如何重写description方法,通过%@输出特定格式的字符串,如姓名和年龄。此方法用于自定义对象的描述展示,便于调试和日志输出。

重写description方法,当使用%@时就会输出特定的字符串。

- (NSString *)description {
  return [NSString stringWithFormat:@"姓名:%@, 年龄:%d", _name, _age];
}

 Person *person = [[Person alloc] init];

之后在使用NSLog(@"%@", person)时,就使用的是description方法。

转载于:https://www.cnblogs.com/cchHers/p/8893565.html

### 重写父类方法的定义与要求 在Java中,子类可以通过**重写(Overriding)**父类的方法来提供特定于子类的实现。重写方法必须满足以下条件: - 方法名称必须相同; - 参数列表必须相同; - 返回类型可以相同或为父类方法返回类型的子类型(协变返回类型); - 访问权限不能比父类方法更严格; - 父类方法必须是可访问的(即不能是`private`修饰的); - 父类中的`final`方法不能被重写; - 静态方法不能被重写为实例方法,反之亦然;若父子类均有同名静态方法,则称为**隐藏**而非重写[^2]。 例如: ```java class Animal { public void speak() { System.out.println("Animal speaks"); } } class Dog extends Animal { @Override public void speak() { System.out.println("Dog barks"); } } ``` 在上述代码中,`Dog`类重写了`Animal`类的`speak()`方法,提供了不同的行为实现[^3]。 ### 使用 `super` 调用父类方法 如果子类重写了父类方法但仍希望调用原始实现,可以通过`super.方法名(参数)`的方式显式调用父类方法。这种机制常用于装饰者模式等设计模式中。 例如: ```java abstract class Beverage { String description = "Unknown Beverage"; public String getDescription() { return description; } public abstract double cost(); } class DarkRoast extends Beverage { public DarkRoast() { description = "Dark Roast Coffee"; } @Override public double cost() { return 0.99; } } class MilkDecorator extends Beverage { private Beverage beverage; public MilkDecorator(Beverage beverage) { this.beverage = beverage; } @Override public String getDescription() { return beverage.getDescription() + ", 牛奶"; // 扩展父类方法的行为 } @Override public double cost() { return beverage.cost() + 0.5; // 在父类基础上增加费用 } } ``` 在这个例子中,`MilkDecorator`通过调用`beverage.getDescription()`和`beverage.cost()`继承并扩展了父类的功能[^1]。 ### 方法重写的运行时行为 在Java中,方法调用是在运行时根据对象的实际类型动态决定的,这称为**多态**。例如: ```java Animal myPet = new Dog(); myPet.speak(); // 输出 "Dog barks" ``` 尽管变量声明为`Animal`类型,但实际指向的是`Dog`对象,因此调用了`Dog`类的`speak()`方法。成员变量则遵循声明类型,而成员方法遵循实际对象类型[^2]。 ### 相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值