Java面向对象-Java类的继承 与方法重写

1,继承定义以及基本使用

定义:子类能够继承父类的属性和方法;

注意点:Java中只支持单继承; 私有方法不能继承;

package com.xuyigang1234.chp02.extend;

/**
 * 定义一个Animal类
 * */
public class Animal {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void sys() {
        System.out.println("我是一个动物,我的名字是:"+this.getName()+",我的只有"+this.getAge()+"岁。");        
    }

}
package com.xuyigang1234.chp02.extend;
/**
 * 定义Dog类,继承自Animal类
 * 
 * 继承的关键字为 extends
 * */

public class Dog extends Animal {
    
    public static void main(String[] args) {
        Dog dog=new Dog();
        dog.setName("小白");
        dog.setAge(1);
        dog.sys();
        
        
    }
}

实际上把父类Animal的共有方法get set以及say()方法都继承了;

输出:

我是一个动物,我的名字是:小白,我的只有1岁。

2、方法重写

所谓方法的重写 我们可以在子类中根据实际业务把父类的方法重写;

package com.xuyigang1234.chp02.extend;
/**
 * 定义Dog类,继承自Animal类
 * 
 * 继承的关键字为 extends
 * */

public class Dog extends Animal {
    /**
     *  方法重写
     * */
    public void sys() {
        System.out.println("我是一只小狗,我的名字是:"+this.getName()+",我的只有"+this.getAge()+"岁。");        
    }
    public static void main(String[] args) {
        Dog dog=new Dog();
        dog.setName("小白");
        dog.setAge(1);
        dog.sys();
        
        
    }
}

输出:

我是一只小狗,我的名字是:小白,我的只有1岁。

3,对象实例过程以及super关键字

对象实例化 先实例化调用父类构造方法,再调用子类实例化构造方法;

super关键主要是调用父类方法或者属性;

package com.xuyigang1234.chp02.extend;

/**
 * 定义一个Animal类
 * */
public class Animal {
    private String name;
    private int age;
    
    public Animal() {
        System.out.println("无参父类构造方法");
    }
    
    public Animal(String name, int age) {
        System.out.println("有参父类构造方法");
        this.name=name;
        this.age=age;
    }
    
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void sys() {
        System.out.println("我是一个动物,我的名字是:"+this.getName()+",我的只有"+this.getAge()+"岁。");        
    }

}
package com.xuyigang1234.chp02.extend;
/**
 * 定义Dog类,继承自Animal类
 * 
 * 继承的关键字为 extends
 * */

public class Dog extends Animal {
    private String maofa;
    
    public String getMaofa() {
        return maofa;
    }

    public void setMaofa(String maofa) {
        this.maofa = maofa;
    }

    public Dog() {
        System.out.println("无参子类构造方法");
    }
    
    public Dog(String name,int age,String maofa) {        
        super(name,age); //调用父类的构造方法
        this.maofa=maofa;
        System.out.println("有参子类构造方法");
    }
    /**
     *  方法重写
     * */
    public void sys() {
        System.out.println("我是一只小狗,我的名字是:"+this.getName()+",我的只有"+this.getAge()+"岁,有"+this.getMaofa()+"的毛发。");        
    }
    public static void main(String[] args) {
        Dog dog=new Dog("小白",1,"白色");
//        dog.setName("小白");
//        dog.setAge(1);
        dog.sys();
        
        
    }
}

输出:

有参父类构造方法

有参子类构造方法

我是一只小狗,我的名字是:小白,我的只有1岁,有白色的毛发。