java继承final类_7.JAVA-类继承、覆写、final关键字

1.JAVA继承-extends

在java中,要想实现继承则使用extends关键字.

一般子类被称为派生类,父类称为基类(super)

extends需要注意的地方:

java不允许多重继承(一个类只能继承一个父类,不能继承多个父类)、

派生类会继承基类所有属性和方法,但不能直接访问基类的private私有属性

实例化派生类时,会先去调用父类的构造方法构造基类,再实例化自身的属性类对象,最后才是调用自身类构造方法.

在派生类中,有个隐藏的super,表示为基类,所以我们可以通过它指定如何构造基类

1.1 示例1-super使用

注意:super必须放在构造方法首行使用,如果用户不使用super,则编译器默认调用super()来初始化父类

代码如下:

classParent

{publicParent()

{

System.out.println("Parent()");

}publicParent(String str)

{

System.out.println("Parent(String str):"+str);

}

}classDerived extends Parent

{publicDerived()

{

super("123"); //调用Parent(String str)初始化父类

System.out.println("Derived()");

}

}public classTest{public static voidmain(String args[]){

Derived d= newDerived();

}

}

打印如下:

6e68b39c8367656fa5fcc7a30ec4f0ad.png

2.JAVA继承之方法覆写

当派生类覆写基类的方法时候,要遵守方法的权限,返回值以及参数都一致.

如果派生类覆写的基类方法是private的,则不能实现覆写功能,因为基类的private方法是不可见的(参考2.2示例)

派生类覆写方法,一般用于基类的方法不满足当前派生类功能实现时,才会去覆写.

2.1 示例1-覆写

代码如下:

classParent

{public void func(inti)

{

System.out.println("Parent::func()");

}

}class Derived extendsParent

{public void func(int i) //覆写父类的func方法

{

System.out.println("Derived::func()");

}

}public classTest{public static voidmain(String args[]){

Derived d= newDerived();

d.func(1);

}

}

2.2示例2-派生类private无法实现覆写

先来个正常覆写的代码:

classParent

{public voidfunc()

{

System.out.println("Parent::func()");

}public voidprint()

{

func();

}

}class Derived extendsParent

{public void func() //覆写父类的func方法{

System.out.println("Derived::func()");

}

}public classTest{public static voidmain(String args[]){

Derived d= newDerived();

d.print();

}

}

如下图所示,打印派生类的func():

1984a8abf621bf5635da1dd812d6d4d6.png

然后将Parent的func()改为private:

private voidfunc()

{

System.out.println("Parent::func()");

}

如下图所示,则打印基类的func():

0c72d20e72c0de51bcadb1e864ab64d2.png

2.3JAVA继承之如何通过派生类调用基类被覆盖的方法

在上面第1节,我们讲过派生类中有个隐藏的super,表示为基类.所以当基类被覆写的方法时,我们可以通过super来调用基类的方法.

示例-super调用基类方法

classParent

{public voidfunc()

{

System.out.println("Parent::func()");

}

}class Derived extendsParent

{public void func() //覆写父类的func方法{super.func(); //调用父类的func,如果不加super,则会出现一直递归System.out.println("Derived::func()");

}

}public classTest{public static voidmain(String args[]){

Derived d= newDerived();

d.func();

}

}

打印如下:

0627c97806a9c8da9d938da93499e18e.png

3.final关键字

在java中,final被称为终结器, final可以修饰变量,方法和类.

3.1 final修饰类

当final修饰类时,则表示该类为最终的,也就是说该类不能再有子类了,示例如下:

final class A { //修饰该类不能有子类}class B extends A { //错误的继承}

3.2 final修饰方法

当在某个类的方法前面定义final时,则表示该方法不允许在子类里进行方法覆写(可以实现方法重载)

示例如下:

classA {public final void fun() {} //此方法不允许子类覆写

public void fun(int i) {} //可以实现方法重载}class B extendsA {public void fun() {} //错误:此处不允许覆写}

3.3 final修饰变量

当final修饰变量时,则表示该变量为常量(类似C++中const).示例如下:

public static final String LICENSE = "GPL"; //修饰全局常量,定义常量时,名称需大写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值