方法重写和多态

1、继承里方法重写

  1. 在继承关系中,方法名相同,参数列表也一样,覆盖或覆写。
  2. 重载:方法名相同,参数列表不同。
  3. 子类根据自己的需要,定义特定的自己的行为,即沿袭父类的功能名称,又根据子类的需要重新实现父类的方法,从而进行扩展增强。
  4. 练习
    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();
        }
    }

     

  5. 总结:
    1. ⽗类和⼦类之间⽅法名相同,参数列表也相同
       @Override 写在⽅法前⾯,⽤来检查是否是有效的正确的覆盖重写
    2. ⼦类⽅法的返回值类型必须⼩于等于⽗类⽅法的返回值类型(⼩于其实就是它的⼦类)
      1.  java.lang.Object类是所有 类的公共的最⾼⽗类(祖宗类),java.lang.String就是Object的⼦类
      2.  如果返回值类型是基本数据类型和void,那么必须相同
      3. ⼦类的⽅法的权限必须⼤于或等于⽗类⽅法的权限修饰符
             public>protected>默认>private
      4. ⼏种特殊的⽅法不能重写
           1. 静态⽅法不能重写
           2. 私有等在⼦类中不可见的⽅法不能重写
           3. final⽅法不能重写
      5. . toString() 返回当前对象本⾝的有关信息,按字符串对象返回
      6. equals() ⽐较两个对象是否是同⼀个对象,是则返回true
  6. 多态
    1. 是指同⼀⾏为,具有多个不同表现形式
    2. 前提
      1. 继承⽗类或实现接⼝
      2. ⽅法的重写
      3. ⽗类引⽤指向⼦类对象
    3. 格式
      1. ⽗类类型 变量名= new ⼦类对象;
      2. 变量名.⽅法名(); 这个⽅法是⽗类中声明,⼦类中重写的⽅法
    4. 多态体现
      1. 编译时,看⽗类,只能调⽤⽗类声明的⽅法,不能调⽤⼦类扩展的⽅法
      2. 运⾏时,看⼦类,⼀定是执⾏⼦类重写的⽅法体
    5. 多态的好处
      1. 多态参数
      2. 在实际开发过程中,⽗类类型作为⽅法的形式参数,传递⼦类对象给⽅法,进⾏⽅法的调⽤ ,更能体现出多态的扩展性和便利性
  7. 抽象类
    1. 抽象:即不具体,或⽆法具体
    2. 抽象⽅法: 没有⽅法体的⽅法
    3. 抽象类: 被abstract修饰的类
    4. 语法
    1.  抽象类
      1. [权限修饰符] abstract class 类名{}
      2. [权限修饰符] abstract class 类名 extends ⽗类{}
    2. 抽象⽅法
      1. [权限修饰符] abstract 返回值类型 ⽅法名([形参列表]);
      1. 注意抽象⽅法,没有⽅法体
  8. 继承抽象类的类,必须重写⽗类的抽象⽅法,否则,该⼦类也必须声明为抽象类,最终,必须有⼦类实现该⽗类的抽象⽅法,否则,最初始的⽗类到最终⼦类都不能创建对象,就失去了意义。
posted @ 2023-09-07 17:57  韩世康  阅读(14)  评论(0编辑  收藏  举报