添砖Java(其八)——继承,final关键字

 

目录

 

继承:

super关键字:

方法重写:

继承特点:

继承构造方法:

final关键字:


 

继承:

意义:让类于类之间产生父类于子类的关系,子类可以直接使用父类中的非私有成员(包括方法与成员变量)  。

extends关键字就是定义声明父类。
格式:public class 子类 extends 父类。
 

对于基础的我就不赘述了,我们直接讲一些实用一点的操作。

super关键字:


举个例子

class Fu{
    int num=10;
}

class Zi extends Fu
{
    int num=20;
    public void Fuc(){
       System.out.println(num);
    }
}


    public static void main(String[] args) {
        Zi z1=new Zi();
        z1.Fuc();
    }

这里面的主方法会打印什么呢?
a5fd3fdaee174ba283fd5529362a475a.png

如果我们想打印父类里的10我们需要用到super

4be0cccba8bd4d838ddd2372c084051f.png

结果就会变为10
197524d8cf214400899b8b6bb117ace7.png

可见super可以用来区分父子类里面的相同成员。


方法重写:


这里的方法重写与方法重载不一样哟!
当字父子类出现完全一摸一样的方法时, 在创建子类对象调用方法时会优先调用子类的方法的逻辑。这其实就是子类的方法对父类的方法进行了方法重写。且我们通过@override识别方法重写。
如:父子类都有Fuc方法
 

class Fu{
    int num=10;
    public void Fuc()
    {
        System.out.println("666");
    }
}

class Zi extends Fu
{
    int num=20;

    @Override//如果这没报错就是方法重写
    public void Fuc(){
       System.out.println(555);
    }
}
    public static void main(String[] args) {
        Zi z1=new Zi();
        z1.Fuc();
    }

打印的是555
ff2fcdcdb10c41dbb288c85f90f7f3c2.png
那我们怎么调用到父类的方法呢,就是用super
 

class Zi extends Fu
{
    int num=20;

    @Override
    public void Fuc(){
        super.Fuc();
       System.out.println(555);
    }
}

fa85cf513c17479db02ff95f97a5f89c.png

两个方法都打印了。
其实方法重写作用就是我们对父类方法的修改和增强。
tip:私有的父类不能重写,子类在重写时访问权限一定要大于等于父类的方法。



继承特点:


Java继承只支持单继承,不支持多继承,但支持多层继承。

单继承,多继承:就是只能继承一个父类,不能继承多个类。
多层继承就像这个图一样:
59490426db474be5a7ae97cb2422f02a.png

继承构造方法:


构造方法不支持继承,所以构造方法需要自己写,子类在初始化之前需要对父类进行初始化,而且所有的类构造方法中有隐藏了一句supper()代码,这是用来调用父类的无参构造。
 

我们先简单理解一下super();

 

class Fu{
    int a;
    int b;

    public Fu() {
    }
}

class Zi extends Fu
{
    int c;
    int d;

    public Zi() {

    }

    public  void Func()
    {
        System.out.println(""+a+b+c+d);
    }
}

    public static void main(String[] args) {
        Zi z1=new Zi();
        z1.Func();
    }

这次会打印什么呢?
00c021817c1c4a069fc3b0853f6c8714.png
可见他将abcd全部都初始化了,就证明了调用了子父类的无参构造。
 

那为什么说所有类都有super()呢?

其实所有的类,直接或间接的继承了object类,这里不多说,但是可以证明的是每个类都有除本身外其他的一些方法如:
887fa83fa8af4bdaabb5614e4ac80059.png

final关键字:


对于final关键字其实就感觉像是c/c++里的const
特性:
1.修饰方法就表明是最终方法,该方法不能被重写。
2.修饰类就表明是最终类,该类不能被继承。
3.修饰变量说明是常量,不能再次被赋值(类似于const修饰的变量)。

tip:final修饰成员变量时不能被修饰默认值,说明就被修饰的变量一定要初始化,要么直接声明定义在一起,要么在构造方法里初始化。


final修饰的规范:全用大写,用下划线来分割单词如:MAX_NUM

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值