JAVA基础初探(五)继承、父子继承的初始化顺序、子类方法重写、super关键字、final关键字

本文详细介绍了Java中的继承概念,包括继承的语法、初始化顺序、方法重写等核心知识点,并通过实例展示了super关键字和final关键字的使用。

该篇博客目录

1、JAVA继承
2、父子继承的初始化顺序
3、子类方法的重写
4、super关键字
5、final关键字

一、JAVA继承

多个类中存在相同属性和方法时,将这些内容抽取到一个类中,那么多个类无需再定义这些属性和方法,只要继承那个类即可。“is a”关系

1、继承的优点
  • 子类拥有父类的所有属性和方法(private无效)
  • 实现代码复用
2、语法规则
class 子类 extends 父类{
    ....
}

class pig extends Animal{
    ....
}
3、Demo

这里写图片描述

父类

package extends_eg;

public class Father {
    public void say() {
        System.out.println("我在说话");
    }
    public void sleep() {
        System.out.println("我在睡觉");
    }
}

子类

package extends_eg;

public class Daughter extends Father {

}

主函数

package extends_eg;

public class Main_q {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Daughter obj=new Daughter();//因为子类继承了父类所以可以调用父类方法
        obj.say();
        obj.sleep();
    }

}


//输出
//我在说话
//我在睡觉

二、父子继承的初始化顺序

  • 先初始化父类再初始化子类
  • 先执行初始化对象中属性,再执行构造方法中的初始化
下面是一个父类子类先后执行顺序的Demo

父类

package com.xxxx;

public class Animal {
    public int age=10;
    public Animal() {
        System.out.println("Animal类执行了");
        age=20;
    }
}

子类

package com.xxxx;

public class Dog extends Animal {
    public Dog() {
        System.out.println("dog执行");
    }
}

主函数

package com.xxxx;

public class Initail {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Dog dog =new Dog();
    }
}

//输出:
//Animal类执行了
//dog执行

很明显可以看出先执行父类再执行子类


三、子类方法的重写

如果子类对继承父类的方法不满意或者有其他需求,是可以重写父类继承下来的方法的,当调用方法时会优先调用子类的方法

语法规则
  • 返回值类型相同
  • 方法名相同
  • 参数类型及个数相同
下面是子类方法重写的Demo

父类

package extends_eg;

public class Father {
    public void say() {
        System.out.println("我在说话");
    }
    public void sleep() {
        System.out.println("我在睡觉");
    }
}

子类

package extends_eg;

public class Daughter extends Father {
    public void say() {
        System.out.println("我觉得父类的say方法不够好,我要用自己这个");
    }
}

主函数

package extends_eg;

public class Main_q {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Daughter obj=new Daughter();
        obj.say();//优先调用子类重写后的同名方法
    }

}

//输出:
//我觉得父类的say方法不够好,我要用自己这个

四、super关键字

在对象的内部使用,可以代表父类对象

1、访问父类成员变量
  • super.成员变量
2、访问父类的方法
  • super.成员方法()
3、访问父类构造方法(调用父类构造方法)
  • super(..)
  • Tip1:如果父类构造方法是无参的,那将会在子类中隐式调用super();。如果父类构造方法是有参的,需要自己显示调用super(..);
  • Tip2:super(..)必须出现在第一条语句(可以通过下面的Demo发现)
4、super Demo

父类

package extends_eg;

public class Father {
    private int a;
    public Father(int a) {
        this.a=a;
        System.out.println("调用父类构造方法");
    }
}

子类

package extends_eg;

public class Daughter extends Father {
    private int b;
    public Daughter(int a,int b){
        super(a);//一定要在第一句(且因为有参,所以要自己显示调用)
        this.b=b;
        System.out.println("调用了子类的构造器");
    }
}

主函数

package extends_eg;

public class Main_q {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Daughter obj=new Daughter(1,2);
    }
}

//输出:
//调用父类构造方法
//调用了子类的构造器
5、super的应用
  • 子类的构造方法中必须调用其父类的构造方法所以要用到super
  • 如果父类构造方法是无参的,那将会在子类中隐式调用super();。如果父类构造方法是有参的,需要自己显示调用super(..);

五、final关键字

final关键字可以理解成“最终的”含义,可以修饰类,方法,属性,变量

1、修饰类:该类不允许被继承

final修饰Father类

这里写图片描述

假设Daughter类继承Father类

这里写图片描述

报错信息

这里写图片描述

2、修饰方法:该方法不允许被重写

final修饰父类中的print方法

这里写图片描述

如果子类对其父类的print方法进行重写的话,将会报错

这里写图片描述

报错信息

这里写图片描述

3、修饰类的属性:该类的属性不会进行隐式的初始化,所以只能选择对该属性初始时必须有值或者在构造方法中赋值(两者选其一)

final修饰Father类的属性并且初始化其值后,其他位置不能对其进行修改,否则报错

这里写图片描述

final修饰Father类的属性且不初始化其值,则必须在构造方法中对其初始化,否则报错

这里写图片描述

4、修饰变量:即为常量

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值