Java继承性,方法重写重载总结

继承性

引入?

Person类中已经定义过一些结构如属性,方法,Student新创建的类里也有这些结构,那么Student类呢能不能复用Person类里的结构,就会使代码简单很多。就可以使用继承性实现。

package com.csdn.day;

public class Person {

    String name;
    int age;

    public Person(){

    }

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

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

    public void sleep(){
        System.out.println("睡觉");
    }
}


package com.csdn.day;

public class Student {
    String name;
    int age;
    String major;

    public Student(){

    }

    public Student(String name, int age,String major){
        this.name = name;
        this.age = age;
        this.major = major;


    }


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

    public void sleep(){
        System.out.println("睡觉");
    }

    public void study(){
        System.out.println("学习");
    }
}


public class Student extends Person{
    /*String name;
    int age;*/  //Person中定义过的不写了
    String major;

    public Student(){

    }

    public Student(String name, int age,String major){
        this.name = name;
        this.age = age;
        this.major = major;


    }


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

    public void sleep(){
        System.out.println("睡觉");
    }*/

    public void study(){
        System.out.println("学习");
    }
}


继承的好处?

  • 减少代码冗余,提高代码的复用性
  • 便于功能扩展,将多个子类中都要拓展的功能直接声明在父类中
  • 为多态性的使用提供前提

格式体现

class A extends B{}

A 子类 派生类 subclass

B 父类 超类 superclass

  1. 一旦子类A继承父类B以后,子类A中就获取了父类B中声明的结构,如属性,方法私有的结构因为封装性的影响,使得子类不能直接调用符类的结构。

    私有的属性也继承了,只不过外界不能轻易调用,需要通过get,set处理;私有方法也获取到了,验证在其他方法中调用私有方法,然后让对象调用那个“其他方法”,发现私有方法也执行了

  2. 子类继承父类之后,还可以声明自己特有的属性或方法,来实现功能的扩展

规定

  1. 一个类可以被多个子类继承
  2. 一个子类只能有一个父类(从一个父类中继承),java 只支持单继承
  3. 子父类是相对概念,Person,Student,MiddleStudent,多层继承,MiddleStudent继承自Student,Student继承自Person.
  4. 子类直接继承的父类为直接父类,间接继承的父类称为间接父类
  5. 子类继承父类后,就获取了直接父类以及所有间接父类中声明的属性和方法。
  6. 继承描述父子类关系可以描述成is a 的所属关系

如果没有显式地声明一个类的父类的话,则此类继承于java.lang.Object类。

在IDEA中,选中类名,快捷键 ctrl + h ,Eclipse ,ctrl + t ,可以看到当前类以及父子类结构

所有的Java类,除java.lang.Object外,都直接或间接的继承于java.lang.Object类。

意味着,所有的java类具有Object类声明的功能。

方法重写重载

方法重写(Override/Overwrite)

从父类中继承过来的方法不能满足子类需求,子类可以对父类中继承过来的方法进行改造,这为重写或覆盖。程序执行时,子类方法将覆盖父类的方法。

重写以后,创建子类对象去调用子父类中的同名同参的方法时,实际执行的是子类重写父类的方法。父类对象调用同名方法,执行的是父类中的方法。

区分重载与重写

方法重载Overload, java的类中函数名相同,参数个数,类型不一样的函数之间可以构成重载。注意,是否构成重载和方法的修饰符,形参列表名,方法体,返回值都无关,只和参数个数,类型有关。

方法重写Override,父类方法的实现不能够满足子类的需求,子类可以对父类继承过来的方法重新实现。

特点:

方法名,参数列表必须完全一致;

子类方法的访问修饰符可以和父类不同,但有限制,其修饰符要比父类的范围大;特殊情况,子类不能重写父类中声明为private权限的方法。

返回值类型也可以不同,限制是,子类的返回值类型须是父类返回值类型或其子类型。如果父类被重写的方法的返回值类型是void,子类重写的方法的返回值类型只能是void;若父类返回值类型是基本数据类型,如double,则子类重写方法的返回值类型必须是相同的基本数据类型,必须也是double

子类和父类中同名同参的方法,若要是重写的话,那么是非static的,声明为static的话,方法就不归为重写方法了。static在权限修饰符和返回值类型之间

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值