【Java基础-面向对象中(2/2)】

本文深入探讨Java中的面向对象特性,包括方法的重写,详细阐述了重写的规定及应用场景。接着讲解了super关键字的使用,分析了子类对象实例化的全过程。同时,介绍了多态性的概念,特别是向下转型和instanceof关键字的应用,如何避免转型异常并理解类之间的实例关系。
摘要由CSDN通过智能技术生成

方法的重写

方法的重写(override / overwrite)
1、重写:子类继承父类以后,可以对父类中的同名同参数的方法,进行覆盖操作。
2、应用:重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法时,实际执行的是子类重写父类的方法。
3、重写的规定:
方法的声明:权限修饰符 返回值 方法名(形参列表) throws 异常类型{
方法体
}

约定俗成:子类中叫重写的方法,父类中叫被重写的方法。

               ① 子类重写的方法的“方法名和形参列表”与父类被重写的方法的“方法名和形参列表”相同。
               ② 子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符。
                           ☆(方法的重写就是覆盖,权限不小于父类,才能覆盖掉父类的方法,像摊煎饼)
                   >特殊情况:子类不能重写父类中声明为private权限的方法。
               ③ 返回值类型:
                   >父类被重写的方法的返回值类型是void的,则子类重写方法的返回值类型也只能是void。
                   >父类被重写的方法的返回值类型是A,则子类重写方法的返回值类型也只能是A或A的子类。
                   >父类被重写的方法的返回值类型是基本数据类型(比如:double),则子类重写方法的返回值类型也只能是相同的基本数据类型(double)。

               ④ 子类重写的方法抛出的异常类型不大于父类被重写的方法抛出异常类型。(具体放到异常处理时候讲)

               ******子类和父类中的同名同参数列表的方法要么都声明为非static的(考虑重写),要么都声明为非static的(不是重写)******
                            (静态方法不能被覆盖,因为静态的方法是随着类的加载而加载的,后面讲到static关键字再详细说明)
  	 student s = new student();
      s.eat();//重写了父类的eat方法,所以子类对象调用了子类重写父类的方法。

      s.walk(10);//父类中的walk方法调用了show方法,show方法的权限是private。子类看不到,所以子类不算重写了show方法。
                          //所以子类和父类里的show的方法都是单独的个体。为什么walk方法调用了父类的show方法,没调用子类的show方法
                          //个人理解是就近原则?总之父类中private修饰的方法,不要在子类中声明同名方法!

      System.out.println("*********************");
      s.study();

      ppperson p = new ppperson();
      p.eat();//父类调用父类自己的eat方法,不受子类重写的影响。
//-------------------------------------  类  --------------------------------------------------
class ppperson{
   

  String name;
  int age;

  public ppperson() {
   
  }

  public ppperson(String name, int age) {
   
      this.name = name;
      this.age = age;
  }

  public void eat(){
   
      System.out.println("吃饭");
  }

  public void walk(int distance){
   
      System.out.println("走路,走了:"+distance+"公里");
      show();
  }

  private void show(){
   
      System.out.println("我是一个人");
  }


  public Object info(){
   
      return null;
  }

  public double info1(){
   
      return 1.0;
  }
}

class student extends ppperson{
   
  String major;

  public student(){
   
  }

  public student(String major){
   
      this.major = major;
  }

  public void study(){
   
      System.out.println("学习,专业是:"+major);
  }

  //重写父类的eat方法
  public void eat(){
   
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值