方法重写和多态
1、继承里方法重写
- 在继承关系中,方法名相同,参数列表也一样,覆盖或覆写。
- 重载:方法名相同,参数列表不同。
- 子类根据自己的需要,定义特定的自己的行为,即沿袭父类的功能名称,又根据子类的需要重新实现父类的方法,从而进行扩展增强。
- 练习
package com.phone; //手机的父类,有发短信功能,有打电话功能,来电显示 public class Phone { public void sendMessage() { System.out.println("发短信"); } public void call() { System.out.println("打电话"); } public void showNum() { System.out.println("显示来电号码"); } }
package com.phone; //智能手机 public class AiPhone extends Phone { //重写父类的来电显示功能,并增加自己的新功能 @Override public void showNum() { super.showNum(); //增加新功能 System.out.println("显示来电姓名"); System.out.println("显示来电头像"); } }
package com.phone; //手机的测试类 public class PhoneTest { public static void main(String[] args) { //创建子类对象 AiPhone iPhone=new AiPhone(); iPhone.sendMessage(); iPhone.call(); iPhone.showNum(); } }
- 总结:
-
⽗类和⼦类之间⽅法名相同,参数列表也相同@Override 写在⽅法前⾯,⽤来检查是否是有效的正确的覆盖重写
-
⼦类⽅法的返回值类型必须⼩于等于⽗类⽅法的返回值类型(⼩于其实就是它的⼦类)
- java.lang.Object类是所有 类的公共的最⾼⽗类(祖宗类),java.lang.String就是Object的⼦类
-
如果返回值类型是基本数据类型和void,那么必须相同
-
⼦类的⽅法的权限必须⼤于或等于⽗类⽅法的权限修饰符public>protected>默认>private
-
⼏种特殊的⽅法不能重写1. 静态⽅法不能重写2. 私有等在⼦类中不可见的⽅法不能重写3. final⽅法不能重写
-
. toString() 返回当前对象本⾝的有关信息,按字符串对象返回
-
equals() ⽐较两个对象是否是同⼀个对象,是则返回true
-
- 多态
-
是指同⼀⾏为,具有多个不同表现形式
-
前提
-
继承⽗类或实现接⼝
-
⽅法的重写
-
⽗类引⽤指向⼦类对象
-
-
格式1. ⽗类类型 变量名= new ⼦类对象;2. 变量名.⽅法名(); 这个⽅法是⽗类中声明,⼦类中重写的⽅法
-
多态体现1. 编译时,看⽗类,只能调⽤⽗类声明的⽅法,不能调⽤⼦类扩展的⽅法2. 运⾏时,看⼦类,⼀定是执⾏⼦类重写的⽅法体
-
多态的好处1. 多态参数2. 在实际开发过程中,⽗类类型作为⽅法的形式参数,传递⼦类对象给⽅法,进⾏⽅法的调⽤ ,更能体现出多态的扩展性和便利性
-
-
抽象类1. 抽象:即不具体,或⽆法具体2. 抽象⽅法: 没有⽅法体的⽅法3. 抽象类: 被abstract修饰的类4. 语法
-
抽象类1. [权限修饰符] abstract class 类名{}2. [权限修饰符] abstract class 类名 extends ⽗类{}
-
抽象⽅法1. [权限修饰符] abstract 返回值类型 ⽅法名([形参列表]);1. 注意抽象⽅法,没有⽅法体
-
继承抽象类的类,必须重写⽗类的抽象⽅法,否则,该⼦类也必须声明为抽象类,最终,必须有⼦类实现该⽗类的抽象⽅法,否则,最初始的⽗类到最终⼦类都不能创建对象,就失去了意义。