Java 继承、重载和重写了解

继承
在Java编程中,难免会出现代码复用的现象,代码复用会降低工作的效率。继承是为了提高程序员的编码效率。子类可以继承父类中的属性和方法(私有属性和私有方法除外),同时子类可以拥有自己的特殊性,这些属性和方法是父类所不拥有的。
子类如果想要调用父类中私有变量的话,只能通过从父类继承而来的Getter和Setter函数间接调用。
重写(Override)
子类与父类的方法返回类型一样、方法名称一样,参数一样,这样我们说子类与父类的方法构成了重写关系。为什么要重写呢?因为如果子类方法中存在和父类方法中不一样的内容就可以利用重写的方法进行补充添加。
重载(Overload)
重载是在一个类中,方法名相同,但是参数不同(具体来说是:参数的个数不同或者参数的类型不同),与返回类型或访问修饰符没有半毛钱关系。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表
我们为什么要重载?用一个方法名来创造多个功能相似的方法比较方便。我们在调用这个方法的时候,可以根据需要实现不同的功能。

举个栗子:
Java 继承、重载和重写了解_第1张图片

//父类代码
public class Animal {
    private String name;
    private String sex;
    private String weight;
    private String bodyCondition;
    private String emtionalState;

    public void behaviorAvoid(){
        System.out.print("Animal behaviorAvoid:run");
    } //普通函数

    //下面两个构造函数属于重载
    public Animal() {
    } //无参构造函数

    public Animal(String name, String sex, String weight, String bodyCondition, String emtionalState) {
        this.name = name;
        this.sex = sex;
        this.weight = weight;
        this.bodyCondition = bodyCondition;
        this.emtionalState = emtionalState;
    } //有参构造函数

    //Getter & Setter 函数
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String male) {
        this.sex = male;
    }

    public String getWeight() {
        return weight;
    }

    public void setWeight(String weight) {
        this.weight = weight;
    }

    public String getBodyCondition() {
        return bodyCondition;
    }

    public void setBodyCondition(String bodyCondition) {
        this.bodyCondition = bodyCondition;
    }

    public String getEmtionalState() {
        return emtionalState;
    }

    public void setEmtionalState(String emtionalState) {
        this.emtionalState = emtionalState;
    }
}
//子类Cat代码

/**
 * 重写(Override)举例
 */

public class Cat extends Animal {
    //A extends B:表示 A类 继承于 B类
    //B类中的属性和方法都可以被A类所用(除了私有类型)

    @Override//behaviorAvoid函数重写
    public void behaviorAvoid() {
        super.behaviorAvoid();  //先执行父类的代码
        System.out.println(",climb the tree"); //再执行子类的代码
    }
}
//子类Dog代码

/**
 * 重载(Overload)举例
 */

public class Dog extends Animal{
    //这两个函数也是重载
    @Override
    public void behaviorAvoid() {
        super.behaviorAvoid();
        System.out.println("with the tail between the legs");
    }
    public void behaviorAvoid(String word){
        super.behaviorAvoid();
        System.out.println("with" + word + "in its mouth and the tail between the legs");
    }
}
public class Main {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.behaviorAvoid();

        cat.setName("Tom");
        cat.setSex("male");
        cat.setWeight("3kg");
        cat.setBodyCondition("Well");
        cat.setEmtionalState("Happy");
        System.out.println(
                cat.getName()+" "+
                cat.getSex()+" "+
                cat.getWeight()+" "+
                cat.getBodyCondition()+" "+
                cat.getEmtionalState());

        Dog dog = new Dog();
        dog.behaviorAvoid();
        dog.behaviorAvoid("meat");
    }
}
结果:
Animal behaviorAvoid:run,climb the tree
Tom male 3kg Well Happy
Animal behaviorAvoid:runwith the tail between the legs
Animal behaviorAvoid:runwithmeatin its mouth and the tail between the legs

你可能感兴趣的:(Java 继承、重载和重写了解)