Java进阶之类与继承

继承

关键字: extends
格式:
public class 子类名 extends 父类名
{
子类的类体;
}
定义:
继承是类的层次模型,子类可以复用父类中的属性和方法,继承提倡代码的复用,子类可以扩展父类中的行为/方法/功能,将共同的属性和方法在父类中定义,这样类的关系就是继承。

package com.wlx.day505;

/**
 * 父类
 */
public class Animal
{
    //定义Animal的属性
    String aname;
    int aage;
    String asex;


    //定义动物的行为

    /**
     * 动物吃的行为
     * @param food
     */
    public  void  eat(String food)
    {
        System.out.println("吃"+food);
    }


    /**
     * 动物跳的行为
     */
    public  void  jump(double height)
    {
        System.out.println("跳"+height+"厘米");
    }
}

package com.wlx.day505;

/**
 * Animal的子类
 * 鱼类属于动物类
 * 鱼类继承动物类
 */
//           子类           父类
public class Fish extends Animal
{

    /**
     * 鱼游的行为
     */
    public void  swim()
    {
        //复用父类中的eat()方法
        eat("水草");
        //复用父类中的aname属性
        System.out.println(aname+"鱼在水中游的行为");
    }

}
package com.wlx.day505;

/**
 * Animal的子类
 * 猫属于动物类
 * 猫继承动物类
 */
//          子类          父类
public class Cat extends Animal
{

    /**
     * 猫爬树的行为
     */
    public void  pa()
    {
        //复用父类中的aname属性
        System.out.println(aname+"猫爬树的行为");
    }

}

1、super关键字

super表示当前类的父类的实例对象的引用。
继承的时候,默认情况下子类的无参数的构造方法调用父类无参数的构造方法。
用法:
1、在子类的构造方法中使用super()调用父类的构造方法,默认情况下调用父类的无参数的构造方法,必须在构造方法体除注释以外的第一行,当this()和super都要写时,只要写this即可,super编译器和JVM会自动处理。
2、当子类中重写/覆盖了父类中的方法,那么此时子类可以通过super.父类实例方法名()调用父类被覆盖的方法。
3、当子类中的全局变量和父类中的全局变量同名时,子类通过super.父类实例属性名调用父类同名的属性。

package com.wlx.day505;

/**
 * Animal的子类
 * 猫属于动物类
 * 猫继承动物类
 */
//          子类          父类
public class Cat extends Animal
{

    String aname = "加菲猫";

    /**
     * 无参数的构造方法
     */
    public Cat()
    {
        //调用父类有一个整数参数的构造方法
//        super(12);
    }

    /**
     * 单独写猫跑的行为
     */
    public  void  run()
    {
        System.out.println("猫使用四条腿跑");
    }


    /**
     * 猫爬树的行为
     */
    public void  pa()
    {
        //复用父类中的aname属性
        System.out.println(super.aname+"猫爬树的行为");
        //使用当前子类中的aname属性
        System.out.println(aname+"爬树的行为");
//        Animal  animal = new Animal();
        //通过super.父类实例方法名()调用父类被覆盖的方法
        super.run();
    }

    public static void main(String[] args)
    {
        new Cat().pa();
    }

}

1.2、方法重写/覆盖

定义:
如果子类中的实例方法名和父类中的实例方法同名,参数列表和返回值类型也一样,此时构成方法的重写/覆盖。
重写约束条件:
1、子类中的实例方法名、参数列表、返回值类型必须和父类中的一致。
2、当在能够访问到的情况下,子类可以扩大重写父类中的方法的访问权限,但是不能缩小。
3、父类中的静态方法不能被子类重写为非静态方法。
4、父类中的非静态方法不能被子类重写为静态方法。
5、重写只能发生在继承类中的实例方法/非静态方法中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值