java OOP 继承

继承与方法重写

继承

微笑微笑微笑


从一般到特殊的关系,是一种拓展关系,子类对象是父类的一种,也可称为”is a“的关系。

格式:
        修饰符 class SubClass extends SuperClass{
    }
 
继承是通过extends来实现的
 
继承提高了代码的复用性,提高了软件的开发效率
 
让类与类之间产生关系,这个是实现多态的前提
 
子类对象访问实例成员的时候,是现在子类里找,要是找不到再去父类找
 
每个类有且只有一个直接父类

父类的属性子类都可以用,反之NO ok;

子类构造的时候,先初始化父类后初始化子类;

子类会自动调用父亲类不带参数的构造方法;

父类没有无参构造,子类调用时构造时第一行加上 supuer(实参);
 
一个类没有显示的继承其他的一个类时候,默认的直接父类就是object类
一旦一个类显示的继承了其他的一个类的时候,此时默认的直接父类object就会被取消
 
 
父类里面私有的东西,子类不能继承。


方法的重写(override)
重写的要求:
1、必须有继承关系;
2、方法名和父类方法名相同,参数一样;
3、子类覆盖方法的访问权限必须大于等于父类的方法的访问权限
4、方法覆盖只能存在于子类和父类之间
5、子类覆盖方法不能比父类被覆盖方法抛出更多异常

方法重写与方法重载之间的关系:重载发生在同一个类内部的两个或多个方法。重写发生在父类与子类之间。

final关键字在继承中的使用

final可以用于以下四个地方:

定义变量,包括静态的和非静态的。

如果final修饰的是一个基本类型,就表示这个变量被赋予的值是不可变的,即它是个常量;

如果final修饰的是一个对象,就表示这个变量被赋予的引用是不可变的,不可改变的只是这个变量所保存的引用,

并不是这个引用所指向的对象,其实更贴切的表述final的含义的描述,那就是,如果一个变量或方法参数被final修饰,

就表示它只能被赋值一次,但是JAVA虚拟机为变量设定的默认值不记作一次赋值。

被final修饰的变量必须被初始化。初始化的方式有以下几种:

1. 在定义的时候初始化。

2. 在初始化块中初始化。

3. 在类的构造器中初始化。

4. 静态变量也可以在静态初始化块中初始化。

1) 定义方法。

当final用来定义一个方法时,它表示这个方法不可以被子类重写,但是它这不影响它被子类继承。

说明:

具有private访问权限的方法也可以增加final修饰,但是由于子类无法继承private方法,因此也无法重写它。

编译器在处理private方法时,是按照final方法来对待的,这样可以提高该方法被调用时的效率。

不过子类仍然可以定义同父类中的private方法具有同样结构的方法,但是这并不会产生重写的效果,而且它们之间也不存在必然联系。

3)定义类。

由于final类不允许被继承,编译器在处理时把它的所有方法都当作final的,因此final类比普通类拥有更高的效率。

final的类的所有方法都不能被重写,但这并不表示final的类的属性(变量)值也是不可改变的,要想做到final类的属性值不可改变,

必须给它增加final修饰。

关于继承的几点注意:

a) 父类有的,子类也有

b) 父类没有的,子类可以增加

c) 父类有的,子类可以改变

d) 构造方法不能被继承

e) 方法和属性可以被继承

f) 子类的构造方法隐式地调用父类的不带参数的构造方法

g) 当父类没有不带参数的构造方法时,子类需要使用super来显

式地调用父类的构造方法,super指的是对父类的引用

h) super关键字必须是构造方法中的第一行语句。


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值