Java重写的方法和覆盖

使用重写优化电子宠物系统需求说明:按照方法的重写或方法的覆盖的注意事项:

(1)子类根据需求对从父类继承的方法进行重新编写;

(2)重写时,可以用super.方法的方式来保留父类的方法;
(3)构造方法不能被重写;回顾之前使用继承实现的电子宠物系统,请使用方法的重写或覆盖优化现有代码,重写宠物类的宠物自白方法,在不同类型的宠物进行自白时,介绍其不同的特性,如:狗狗的自白需要介绍其品种、企鹅的自白需要介绍其性别。实现如图所示的输出效果。    

[javascript]  view plain  copy
  1. package cn.java.pet;  
  2.   
  3. /** 
  4. * 宠物抽象类 
  5. */  
  6. public class Pet {  
  7.       private String petName;   //宠物名称  
  8.       private int petHealth;    //宠物健康值  
  9.       private int petLove;      //宠物亲密度  
  10.         
  11.       public Pet(){  
  12.                   
  13.       }  
  14.         
  15.       public Pet(String name){  
  16.                 this.petName = name;  
  17.                 this.petHealth = 100;  
  18.                 this.petLove = 0;  
  19.       }  
  20.         
  21.       /** 
  22.          * 宠物自我介绍 
  23.          */  
  24.       public void printInfo(){  
  25.                 System.out.println("我的名字叫"+this.petName+",我的健康值是"+this.petHealth+",我与主人的亲密程度是"+this.petLove);  
  26.       }  
  27.         
  28.       public String getPetName() {  
  29.                 return petName;  
  30.       }  
  31.   
  32.       public void setPetName(String petName) {  
  33.                 this.petName = petName;  
  34.       }  
  35.   
  36.       public int getPetHealth() {  
  37.                 return petHealth;  
  38.       }  
  39.   
  40.       public void setPetHealth(int petHealth) {  
  41.                 this.petHealth = petHealth;  
  42.       }  
  43.   
  44.       public int getPetLove() {  
  45.                 return petLove;  
  46.       }  
  47.   
  48.       public void setPetLove(int petLove) {  
  49.                 this.petLove = petLove;  
  50.       }  
  51.   
  52.         
  53. }  
  54. package cn.java.pet;  
  55.   
  56. /** 
  57. * 狗狗类 
  58. */  
  59. public class DogPet extends Pet {  
  60.       private String dogBreed;   //狗狗品种  
  61.         
  62.       //如果父类定义带有参数的构造函数未显示定义无参构造函数,那么子类必须需要调用父类需求的构造函数  
  63.       public DogPet(String name,String breed){  
  64.                 super(name);  
  65.                 this.dogBreed = breed;  
  66.       }  
  67.         
  68.         
  69.       /** 
  70.          * 狗狗自我介绍, 对宠物类printInfo()方法进行了重写(覆盖) 
  71.          */  
  72.       public void printInfo(){  
  73.                 super.printInfo();//通过super关键字调用父类的需要的方法,super是指在子类中代表父类对象的引用(指向同一个堆内存中地址)  
  74.                 System.out.println("我是一只"+this.dogBreed);  
  75.       }  
  76. }  
  77.   
  78. package cn.java.pet;  
  79.   
  80. /** 
  81. * 企鹅类 
  82. */  
  83. public class PenguinPet extends Pet {  
  84.       private String penguinSex;   //企鹅性别  
  85.         
  86.       public PenguinPet(String name,String sex){  
  87.                 super(name);  
  88.                 this.penguinSex = sex;  
  89.       }  
  90.         
  91.         
  92.       /** 
  93.          * 企鹅自我介绍 ,对宠物类printInfo()方法进行了重写(覆盖) 
  94.          */  
  95.       public void printInfo() {  
  96.                 super.printInfo();  
  97.                 System.out.println("我的性别是"+this.penguinSex);  
  98.       }  
  99.   
  100.       public String getPenguinSex() {  
  101.                 return penguinSex;  
  102.       }  
  103.   
  104.       public void setPenguinSex(String penguinSex) {  
  105.                 this.penguinSex = penguinSex;  
  106.       }  
  107. }  
  108.   
  109. package cn.java.pet.test;  
  110.   
  111. import cn.java.pet.DogPet;  
  112. import cn.java.pet.PenguinPet;  
  113. import cn.java.pet.Pet;  
  114.   
  115. /** 
  116. * 测试类 
  117. */  
  118. public class PetTest {  
  119.   
  120.       public static void main(String[] args) {  
  121.                 //创建狗狗实例对象  
  122.                 Pet dogPet = new DogPet("欧欧","雪娜瑞犬");  
  123.                 //狗狗自我介绍  
  124.                 dogPet.printInfo();  
  125.   
  126.                 //创建企鹅实例对象  
  127.                 Pet penguinPet = new PenguinPet("楠楠","Q妹");  
  128.                 //企鹅自我介绍  
  129.                 penguinPet.printInfo();  
  130.       }  
  131.   
  132. }  
### 方法覆盖方法重写的定义与区别 方法覆盖(Override)与方法重写(有时也称为覆盖)在编程中是同一个概念,通常用于描述子类重新定义从父类继承的方法。这一机制支持运行时多态,使得程序在执行时可以根据对象的实际类型调用相应的方法。例如,在 Java 中,子类可以重写父类的方法,以提供特定的实现。 在定义上,方法覆盖要求子类中的方法与父类中被重写方法具有相同的方法名、参数列表返回类型。此外,访问权限不能比父类中的方法更严格,且抛出的异常不能比父类方法更多或更宽泛。 ```java class Animal { public void makeSound() { System.out.println("Some sound"); } } class Dog extends Animal { @Override public void makeSound() { System.out.println("Bark"); } } ``` ### 方法覆盖方法重写的实现方式 在 Java 中,使用 `@Override` 注解可以明确指出一个方法是打算重写父类中的方法。这不仅有助于编译器检查是否确实存在可重写方法,还能提高代码的可读性可维护性。 Python 中的方法重写更为灵活,因为 Python 是动态类型的,不需要严格遵循参数返回类型的匹配规则: ```python class Animal: def make_sound(self): print("Some sound") class Dog(Animal): def make_sound(self): print("Bark") ``` 在实现方法覆盖时,应确保子类的方法行为符合预期,并且在逻辑上是对父类方法的合理替代,以避免违反 Liskov 替换原则。 ### 方法覆盖方法重载的区别 方法重载(Overload)与方法覆盖不同,它是指在一个类中可以有多个同名的方法,但这些方法的参数列表(参数的类型、个数或顺序)必须不同。返回值类型的不同不足以构成方法的重载。方法重载是 Java 多态的一种表现形式,它允许使用相同的方法名处理不同的数据类型或数量的参数。 ```java public class Calculator { public int add(int a, int b) { return a + b; } public double add(double a, double b) { return a + b; } } ``` ### 方法重构的概念 方法重构是指在不改变外界访问的情况下对代码进行修改,但不改变原方法的效果,目的是提高其性能,使程序更加易读、可维护。重构是在不改变软件可观察行为的前提下改善其内部结构。重构通常不是一次性的,它贯穿软件的整个生命周期,只要觉得不合理都是重构的时机。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值