JAVA继承-注意事项

JAVA继承

1.子类所有构造器,会隐式调用父类的无参构造器

原理:

子类所有构造器,都会在第一行隐式调用super()。

问题:

如果父类没有无参构造器,编译报错。

解决:

  • 在子类的构造器方法中的第一行指定一个父类带参构造器。
    注意:要在第一行调用带参构造器,否则又会自动隐式调用super(),
  • 或者给父类补上一个无参构造器。

2.final

  • 修饰类

被修饰的类无法被继承,而且所有的方法都是final的,注意:域不是final

public final class FatherClass {
    
}

public class SonClass extends FatherClass{
    
}
报错:Cannot inherit from final 'com.chen.sss.demo.extendsDemo.FatherClass'
翻译:无法继承一个声明为final的类
  • 修饰方法

被修饰的方法无法被重写

//父类方法
public final String getName (){
    return name;
}

//子类方法
public String getName(){

}
报错:'getName()' cannot override 'getName()' in 'com.chen.sss.demo.extendsDemo.FatherClass'; overridden method is final
  • String举例子

例如String,如果有一个String的引用,它引用的一定是一个String对象。因为String对象声明为final,没有子类。

从而无法实现父类引用指向子类对象,引用只能指向本身的对象。

3.强制类型转换

将一个子类的引用赋值给一个超类变量是允许的。

但将一个超类的引用赋值给一个子类变量,是不允许的。

//允许
FatherClass father = new SonClass();
//不允许
SonClass sonClass = new FatherClass();

转换+检查:

if(father instanceof SonClass){//检查类型
    SonClass son = (SonClass) father;//转换
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值